请看两种代码
一、
byte a1=1,a2=2,a3,a4;
a3=a1+a2;
a4=1+2;
这段代码有没有问题,有问题的话出在第几行,为什么有问题,怎样改?
解答:
代码有问题,原因如下
1. 第2行,a3=a1+a2,Java中,byte short char在计算时将会被转为int类型,a1+a2这个变量是int类型的,将其赋值给a3必定编译出错;
2. 第3行正确,Java有常量优化机制,在编译时已经把1+2的结果即3赋给了a4,虽然在java中常量整形的默认数据类型是int,浮点形的默认数据类型是double,但也可将其赋值给byte short,只是当常量的值在被赋给变量数据类型范围之外时,打印该变量时的结果不对,
(所谓常量优化机制,即编译器在编译时先判断表达式右侧是否都是常量 如果都是常量则在编译阶段就先将常量的运算结果计算出来 然后直接赋值给左侧变量 而不是在运行时再计算赋值)
如
byte test1=128;
System.out.println(test1);
Console输出:
-128
二、
byte a=1;
a++;
a+=1;
a=a+1;
这段代码有没有错误,如果有,错误在哪里,为什么出错,怎么改?
答案:
有错误,错误在第4行
原因:
1.第4行代码a+1为int类型的变量,将其赋值给a(byte类型)会编译出错
2.第2、3行代码没有错误,a+=1;相当于a=(byte)(a+1);,a++;会自动转换变量类型