早教吧作业答案频道 -->其他-->
试解释程序设计语言中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的底层运行机制存在怎么样的差异呢?
请详解,谢谢.
下面是一段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的存储空间中.
好好思考下吧,有点长有点细,应该能解决楼主的问题了.
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+...的网友还看了以下:
热力学基础,一理想气体系统起始压强为p,体积为v,由如下三个准静态过程构成一个循环∶先等温膨胀到2 2020-04-26 …
三角形的面积s=12(a+b+c)r,a,b,c为其边长,r为内切圆的半径,利用类比法可以得出四面 2020-05-02 …
有一A球自距地面高h处开始自由下落,同时地面上一B球以初速度V正对A球竖直上抛,空气阻力不计,问: 2020-05-17 …
如图所示,水平地面附近,小球B以初速度v斜向上瞄准另一小球A射出,恰巧在B球射出的同时,A球由静止 2020-07-05 …
设u=u(x),v=v(x)都是可微函数,则d(uυ)=()A.udv+υdvB.u′dυ+u′d 2020-07-20 …
求解微分方程:A*v(t)+m*v'(t)=B*exp(-t/T)条件:A,B,m,T为常数,求v 2020-07-23 …
数学关于分式方程的题:①1/f=1/u+1/v,则u=①1/f=1/u+1/v,则u=②当时,方程 2020-08-02 …
求个运动学问题,如果已知S=f(v)求S与t关系时如果用两边同时求导则得到v=f'(v)解出v为一 2020-08-02 …
[2012·陕西高考]小王从甲地到乙地往返的时速分别为a和b(a<b),其全程的平均时速为v,则() 2020-12-09 …
一阶梯如图所示,每个阶梯高度都是0.4m,一球以水平速度v飞出,欲打在第四级台阶上,则v的取值范围是 2020-12-09 …