当前位置: 代码迷 >> J2SE >> short a = 1;当执行a += 2;时,为什么不会提示精度损失?解决办法
  详细解决方案

short a = 1;当执行a += 2;时,为什么不会提示精度损失?解决办法

热度:375   发布时间:2016-04-24 02:28:57.0
short a = 1;当执行a += 2;时,为什么不会提示精度损失?
我知道精度损失错误的出现是因为:非强制性,将一个“高精度”的值,赋值给一个“低精度”的变量。

以下我列出了4种情况:
(有精度损失错误,我简写为‘有’,否则写‘无)
情况1:
short a = 1;
a = a + 2;//有

情况2:
short a = 1;
short b = a + 1;//有

情况3:
short a = 1;
a += 2;//无

情况4:
short a = 2 + 1;//无

------解决方案--------------------
short a = 1;
a += 2;//无
等同于
short a = 1;
a = (short)(a+2);
即跟你的情况4是等同的

------解决方案--------------------
探讨
引用:

short a = 2 + 1;//无,这个是初始赋值,表达式里面全是字面常量值,就会把它当做short类型来赋值,
但是当short a = b+ 1 (b为一个short时),这时就会多一个表达式类型的提升的情况,b 为short ,1为INT,结果为 b+1 为INT 类型, int ---》short 这时就需要强制类型的转换了。

……
  相关解决方案