类型运算细节(面试会考)
在类型转换会出现下列问题,阅读代码,并判断输出结果
class VarDemo{
public static void main(String[] args){
byte b=4;
b=3+7;
System.out.println(b);
}
}
此时的代码并没有问题,输出结果为10,
那么把代码做一下简单的修改试试
1 class VarDemo{ 2 public static void main(String[] args){ 3 byte b=4; 4 //b=3+7; 5 byte b1=3; 6 byte b2=4; 7 b=b1+b2; 8 System.out.println(b); 9 } 10 }
此时的的代码就会报错.从而运行不出来。这不也跟上面的没有区别吗??只是把3和4重新用变量定义一下,为什么就没有结果呢?
这个时候,变量b,是byte类型,赋值为4,已经强转一次了,byte类型取值范围为 -128~127,这个应该还记得吧,因为b1和b2也是byte型
所以在下面的运算语句中,不能判断b1和b2的值的范围,因为他们是变量,值是会变化的,如果超出byte类型范围怎么办?所以java就提示报错
那么我再把代码修改一下
1 class VarDemo{ 2 public static void main(String[] args){ 3 int b=4; 4 //b=3+7; 5 byte b1=3; 6 byte b2=4; 7 b=b1+b2; 8 System.out.println(b); 9 } 10 }
此时就能完全没问题了,第三行b改为int型,所以在输出语句判断时,无论你b1和b2变得多大,我b都能装得下,所以不会报错。遇见这种类型的题需要慎重!