数据类型转换之隐式转换
图中有6个实线箭头,表示无信息丢失的转换,另外有三个虚线箭头,表示可能有精度损失的转换。
当用一个二元运算符连接两个值时,需要将两个操作数转换为同一种类型,然后再进行计算:
- 如果两个操作数其中有一个是double类型,另一个操作数就会转换为double类型。
- 否则,如果其中一个操作数是float类型,另一个操作数就会转换为float类型。
- 否则,如果其中一个操作数是long类型,另一个操作数就会转换为long类型。
- 否则,两个操作数都将被转换为int类型。
float和long类型进行运算,自动转换为float类型:
public class DataType01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//float和long类型进行运算,自动转换为float类型
float a = 10;
Long b = 11L;
float c = a + b;
System.out.println(c);
}
}
byte和int类型进行运算,自动转换为int类型:
public class DataType02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a = 10;
int b = 20;
int c = a + b;
System.out.println(c);
}
}
数据类型转换之强制类型转换
在上一节中我们看到,在必要的时候,int类型的值将会自动地转换为double类型。但另一方面,有时也需要将double转换为int。在Java中,允许这种数值之间的类型转换,当然可能会丢失一些信息。这种可能损失信息的转换要通过强制类型转换(cast)来完成。
将double类型变量强制转换为int类型:
public class DataType03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double a = 37.5;
System.out.println((int)a);
}
}