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

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

7个回答

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

activity110
大丶白 short也一样
接近 3 年之前 回复
eagleyan
Coursera 这个解释不对啊,任何数据都有其范围,整型也有范围,你用整型最大值加1也溢出,但是整型允许加法啊
接近 6 年之前 回复

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

activity110
大丶白 因为b1+b2会自动升为int类型
接近 3 年之前 回复
sunyu2233
坐标永恒 我上面说的也不准确,应该是变量相加先看类型,如果是byte类型,先做类型提升,再做加法,结果值同样是int类型的,如果是常量相加,例如:byte b3=1+2;是没有问题的,常量相加是先计算结果,再看结果是否在byte类型表示的范围,在范围内就没问题了
接近 6 年之前 回复
sunyu2233
坐标永恒 或者是int b3 = b1+b2;
接近 6 年之前 回复

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

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

这个确实是一个问题。

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问