为什么Java在使用“plus equals”运算符时执行从double到integer的隐式类型转换?

可能重复:
变化的行为可能导致精度损失

代码示例A

 public class Test {                                                         
     public static void main(String[] args) {
         int i = 0;
         i = i + 1.5;
     }
 }

代码示例B

 public class Test {                                                         
     public static void main(String[] args) {
         int i = 0;
         i += 1.5;
     }
 }

不出所料,编译A会产生下面的错误。 令人惊讶的是 ,编译B不会产生错误,它看起来像我在double值1.5之前插入一个明确的强制类型转换为整数。 为什么这个世界会发生这种事情? 这违背了我以为我知道的一切!

Test.java:6: possible

 loss of precision

    found   : double
    required: int
            i = i + 1.5;
                  ^
    1 error

它按设计工作。 复合运算符为操作添加隐式转换。 否则,你必须使用明确的演员。

更多信息?

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2


根据Java语言规范,第15.26.2节:

E1 op = E2形式的复合赋值表达式等价于E1 =(T)((E1)op(E2)),其中T是E1的类型,只是E1只计算一次。 例如,以下代码是正确的:

short x = 3;
x += 4.6;

并导致x的值为7,因为它相当于:

short x = 3;
x = (short)(x + 4.6);
链接地址: http://www.djcxy.com/p/73649.html

上一篇: Why does Java perform implicit type conversion from double to integer when using the "plus equals" operator?

下一篇: Why won't my code compile?