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

试解释程序设计语言中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的存储空间中.
好好思考下吧,有点长有点细,应该能解决楼主的问题了.
看了 试解释程序设计语言中a=a+...的网友还看了以下:

一个直角梯形的下底比上底大2CM,高比上底小1CM,面积等于8CM平方,用一元二次方程求出上底下底  2020-05-16 …

等腰梯形已知上底,高度,坡比,如何计算下底?高速公路的路基横断面图,设为一个等腰梯形,假设知道上底  2020-05-23 …

某长方体木块的底面是正方形,它的高比底面边长还多50cm,把这个长方体表面涂满油漆时,如果每平方米  2020-06-02 …

将一空盒放在秤盘上,并将秤的度数调整到零,然后从高出盒底h=4.9m处,将小石子流以每秒n=100  2020-06-20 …

赏析下列4句句子,说出运用的修辞手法和语句的优美.1.我是一滴水,我的梦想是融入大海.2.又是一个  2020-06-29 …

学习了“幂的运算”后,课本提出了一个问题;“根据负整数指数幂的意义,你能用同底数幂的乘法性质推导出  2020-08-01 …

学习了“幂的运算”后,课本提出了一个问题;“根据负整数指数幂的意义,你能用同底数幂的乘法性质推导出  2020-08-03 …

戊戌变法和辛亥革命的共同点不包括()A.是爱国救亡的政治运动B.主张在中国建立资本主义制度C.没有  2020-08-03 …

下列关于辛亥革命和戊戌变法的表述,不准确的是A.都是救亡爱国的政治运动B.都主张改革君主专制制度C.  2020-11-02 …

公共汽车从车站开出时,车上的内燃机的起动是依靠是司机接通电源,使电动机转动来带动曲轴还是司机在停战时  2020-11-06 …