JAVA中byte 、short为什么能赋常量的值,却不能赋变量的值

byte b1= 1;
byte b2 =2;
byte b3 =b1+b2;
这种编译为什么会报错,求指导?

道理很简单,两个byte相加的结果byte未必能装下。比如byte b1 = 129; byte b2 = 129; 你说 byte b = b1 + b2 = ?

你那样是把整数赋给byte,改成byte b1= (byte)1;

这个确实是一个问题。

为了防止数据溢出导致的虚拟机JVM的问题。因此是不支持的!

b1和b2相加的结果值默认是int类型的,改为这样就正确了;byte b3 = (byte)(b1+b2);

byte、short、char类型数据在计算时会首先转换成int类型;
所以上面的第三行代码改成: int b3 = b1+b2; 或者 byte b3 = (byte) (b1+b2); 就不会报错了。图片说明图片说明

https://stackoverflow.com/questions/27122610/why-does-the-java-api-use-int-instead-of-short-or-byte/27122853#27122853

大概意思是两个short或者byte类型相加会自动提升为int

这种定义是不会报错的吧。。。