JAVA的一个基本语法问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 13:38:52
byte a1=1,a2=2,a3;
a3=a1+a2;//这个地方出错!要a3=(byte)(a1+a2)才正确

对于a1=1这里面的1,一开始默认的是int型。a3=a1+a2这里面的a1,a2会自己动转换成int型再进行运算。这一方面不用作解释。
那么问题是a1=1它实际就是byte=int
a3=a1+a2它是byte=int+int(这里面计算机在运算的时候应该是会先算a1+a2值为3,然后把int的3赋给a3)
那么在性质上a1=1和a3=3是一样的性质,而a1=1语法正确,而a3=a1+a2错误呢。
!!!!!!不懂的人不要回答!!!!!!!!!
一二楼的都没说到点子上哦,我知道运算的时候都要转换成int型 。我的疑问在这!
a1=1它实际就是byte=int
a3=a1+a2它是byte=int+int
那么它们有什么不同呢。为什么前者正确而后者错误呢

byte变量占一个字节,整型占4个字节,Java不允许把容量大的变量直接赋值给容量小的,这样会溢出.但可以把整型常量(只要不超过byte取值范围)赋值给byte变量.当然强制类型转换后就没问题了.

byte a1=1 在栈中请求一个字节,然后把1放到这个字节里。
而a1+a2 在运算的时候转化为int型运算,结果也是以int型存储的高位补0,你要把这个结果从一个32位的存储空间里拷贝到一个8位空间里有可能会损失精度,所以不能通过编译

您要弄清楚
byte a1=1,a2=2,a3; 这句申明了a1,a2,a3都是byte类型的
a3=a1+a2它是byte=int+int
所以需要把a1+a2运算后的结果先强制转换成byte类型再赋值给a3