双 a = a + int b 和 int a += 双 b 有什么区别?

为什么:

public class Addition { 
  public static void main() { 
    int a = 0; 
    double b = 1.0; 
    a = a + b;
    System.out.println(a); 
  }
}

不是编译,而是:

public class Addition { 
  public static void main() { 
    int a = 0; 
    double b = 1.0; 
    a += b; 
    System.out.println(a); 
  }
}

编译。


答案 1

在 Java 中,+= 运算符对左手类型具有隐式强制转换。这适用于所有组合运算符。


答案 2

int = int + double 本质上是

int = 双倍 + 双倍

没有铸造,你就无法做到这一点...

int += 双精度强制将结果强制到一个 int,而另一个则需要强制转换。

所以 a = (int)(a + b);

应该编译。

编辑:根据评论中的要求...这里有一个链接到更多的阅读(不是最简单的阅读,但最正确的信息):http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2