早教吧 育儿知识 作业答案 考试题库 百科 知识分享

试解释程序设计语言中a=a+5和a+=5的底层运行机制.下面是一段Java代码:publicclassEnhanceAssignTest{publicstaticvoidmain(String[]args){bytea=5;//下面语句将出错

题目详情
试解释程序设计语言中a=a+5和a+=5的底层运行机制.
下面是一段Java代码:
public class EnhanceAssignTest
{
public static void main(String[] args)
{
byte a = 5;
//下面语句将出错
a = a + 5;
byte b = 5;
//下面语句将不会出现错误
b += 5;
}
}
出错的原因不必解释了,那么为什么“b+=5” 不出错呢?
a=a+5和a+=5的底层运行机制存在怎么样的差异呢?
请详解,谢谢.
▼优质解答
答案和解析
这个涉及到内存处理和变量转换的问题
1、a=a+5,则等号右侧的a+5先计算,然后是a自己先计算,a还是以前的a无所谓,然后是计算5,对于java来说,一个数值型5会默认按int来处理,则此时成了byte+int的计算,故最后结果为int,所以赋值给byte型的a时,出现类型转换错误.
2、a+=5, 说它等价于a=a+5是当且仅当等号左右侧类型相匹配时.
a+=5;在计算机中的执行不会当作a=a+5去执行,而是本身进行内部直接优化,即先取出a的存储单元的值,然后加5,此时的5是没有类型转换的,仅仅是数值5,然后再次放进a的存储单元中,此时的放也是截断型的放,如果结果在byte承受范围内,则正常放入,如果不在,则高位溢出,将低位放进了a的存储空间中.
好好思考下吧,有点长有点细,应该能解决楼主的问题了.