到此我们学习了数据类型、算术运算符,下边看一个不同数据类型的数据之间参与运算的例子:
/**
* 数据类型转换测试
* @author 攀博课堂(www.pbteach.com)
*
*/
public class DatatypeConvertDemo1 {
public static void main(String[] args) {
int a = 3;
int b = 2;
//求a除以b的商,输出1,并不输出1.5,为什么?
System.out.println(a/b);
float c = 3.0F;
//下边就可以得到1.5
System.out.println(c/b);
}
}
根据前边我们学习的知识,使用浮点类型存储小数,程序中a和b都是int整型,两int数据之间运算结果还是int型,有小数时将舍弃小数。
为什么3.0/2就等于1.5?
3.0是float型,float的数据范围比int大,编译器会将b的数据类型自动转为float数据,最后计算c/b的值。
这里提到了数据类型自动转换,什么是数据类型自动转换?
当两个不同数据类型的操作数参与运算时,编译器会自动将其中一个数据类型转成另一个数据类型,使两个数据类型保持一致,数据类型的转换是自动进行所以叫自动转换。
自动转换规则如下:
byte,short,char-->int -->long-->float-->double
说明如下:
两个操作数中有double类型将全部转为double类型
否则,若两个操作数中有float类型将全部转为float类型
否则 ,若两个操作数中有long类型将全部转为long类型
否则 ,两个操作数统一转为int
例子:
/**
* 数据类型转换测试
* @author 攀博课堂(www.pbteach.com)
*
*/
public class DatatypeConvertDemo1 {
public static void main(String[] args) {
int a = 3;
int b = 2;
//求a除以b的商,并不等于1.5,为什么?
System.out.println(a/b);
float c = 3.0F;
//下边就可以得到1.5
System.out.println(c/b);
double d = 4.0D;
byte e = 1;
short f = 2;
//下边自动转换为double
System.out.println(d/b);
//下边自动转换为float
System.out.println(c/b);
//下边自动转换为int
System.out.println(a/f);
System.out.println(e/f);
}
}
总结下规律:
double的数据范围最大,所以它最优先,只要有double就会自动转成double。
除了double就是float的数据范围最大,所以它次优先,后边的long、int一样。
byte,short,char这三个比较特殊,当它们之间或它们和int之间运算时自动转为int。
编译器之所以这样做更重要的是为了保持数据精度没有损失。