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

dan*_*dle 17 java

可能重复:
可能导致精度损失的不同行为

代码示例A.

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

代码示例B.

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

不出所料,编译A会产生以下错误.令人惊讶的是,编译B不会产生任何错误,并且它看起来像在双值1.5之前插入一个显式转换为整数.为什么世界会发生这种情况?这违背了我认为我知道的一切!

Test.java:6: possible

 loss of precision

    found   : double
    required: int
            i = i + 1.5;
                  ^
    1 error
Run Code Online (Sandbox Code Playgroud)

Mec*_*kov 12

它按设计工作.复合运算符向操作添加隐式强制转换.否则你必须使用显式的强制转换.

更多信息?

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

  • +1答案很好,但这是一个更直接的链接:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#5304 (2认同)