学习任务:

视频学习Java自动类型转换

动手测试自动类型转换案例

到此我们学习了数据类型、算术运算符,下边看一个不同数据类型的数据之间参与运算的例子:

/**
 *     数据类型转换测试
 * @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。

编译器之所以这样做更重要的是为了保持数据精度没有损失。

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题