byte 型数据相加
参考:
我查到的大佬的解说
最近做了一道题有些疑惑,在网上查后还是决定记录一下,毕竟自己记性一般般呀。这年轻人😥
题目是这样的:
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
问:这段代码的输出结果是什么?或者发生编译错误或者运行期错误!
当时计算了一下,没错就是13嘛,能有啥错误,这不没超出byte的范围嘛!(内心肯定)
但是结果是错的,无情!
仔细观察:
b6 = b4 + b5 和b3 = (b1 + b2) 有什么区别?
为什么要写两遍?
b4 和 b5是final 修饰的常量 ,b1 和 b2是变量。
byte变量在进行计算时,是先转换为int计算的,计算完毕后int 值是不能直接赋值给byte,需要转换为int所以会产生编译错误!
而常量相加因为具有常量优化机制,所以可以直接识别为byte然后i相加完毕后判断没有超出byte范围,所以直接赋值OK没有报错。