Java中 i = i +j 与 i + = j 的区别
int i = 1;
long j =2;
i += j; //编译通过
i = i + j; //编译不通过
先看官方文档说明
http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2
对复合赋值表达式来说,E1 op= E2 (诸如 i += j; i -= j 等等),其实是等同于 E1 = (T)((E1) op (E2)),其中,T是E1这个元素的类型。
举个栗子
int i = 1;
long j =2;
i += j;
// i += j的实现方式
i = (int)( i + j)
//也就是 +=/-= 运算结果会强转为运算符左边的类型