class TypeConvert
{
public static void main(String[] args){
byte a = 1;
byte b = 2;
byte c;
// c = a+b; // ①
c = 1+2; // ②
System.out.println(c);
}
}
分析
在①c=a+b这一行中,a和b都是byte类型,在运算的过程中会提升为int类型,结果c应该是int类型,而我们定义的c是byte类型,所以会编译报错,可能会损失精度。
在②c=1+2这一行中,虽然数字默认是int类型,但1和2都是常量,java会先把1+2的结果算出来,把结果3赋给c,而3没有超出byte范围,从而成立。
这一结论,我们可以通过xjad反编译工具清楚的看到。