我觉得这样理解还是有点问题的,第一,3和4是常量,默认是int类型的,b是byte类型的,b=3+4;编译时,java应该会检查这个结果是否会超出byte的范围,如果不会,OK,如果是b=3+125可定会报错;
第二,b=b1+b2;三个变量全部被定义为byte类型,java应该不会将b1+b2的结果转换为int型,而是因为b1,b2是变量,所以编译器无法检查b1+b2的结果是否会超出byte的范围,所以报错“可能会损失精度”,另外b=b1+4;也是一样的道理
第三,还有一种特殊的情况是+=,-=,*=,/=,%=在运算时,是不会报错的,即使超出byte的范围也不会报错,可能是java进行了隐式的强制类型转换,这里应该是向下转型,当b+=128时会输出负数,所以丢失精度了。
|