2 qowoeo7538 qowoeo7538 于 2014.12.17 22:42 提问

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

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

6个回答

caozhy
caozhy   Ds   Rxr 2014.12.18 00:05
已采纳

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

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

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

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

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

save4me
save4me   Ds   Rxr 2014.12.17 23:44

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

anikaka
anikaka   2014.12.18 08:31

这个确实是一个问题。

csdn_learn_zzuahui
csdn_learn_zzuahui   2014.12.18 09:52

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!