标题: 关于基本数据类型的自动类型提升与强制类型转换 [打印本页] 作者: 小川行 时间: 2015-3-22 00:40 标题: 关于基本数据类型的自动类型提升与强制类型转换 以下面一道题来说明我们经常遇到的基本类型转换:
以下代码哪个是正确的?为什么?
a. byte b = 1 + 1;
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;
d. byte b = 1; b = ++b;
a正确, 因为在Java虚拟机中 会自动判断1+1是不是在byte的长度之内,如果在长度之内就不会报错,相反则报错。
b错误,b会自动类型提升为int类型,故b+1计算之后结果为int类型,而b是byte,类型不匹配。int不能自动向下转型为byte
c正确,首先会判断1是否在byte范围之内,在范围之内不会损失精度,所以答案正确;如果1替换成大于byte类型长度数字,会把这个数字强制转换成byte型的数字(会损失精度),这个数在和b相加,得到最后的结果,但是这样的结果是不正确的。
d正确,++计算结果是int类型,但是++b前面有一个隐式的(byte),将结果强制转换为byte类型,所以结果是正确的