众所周知,在java中 a = a+b在大多数情况下都是可以替换为 a +=b的,那么这两种写法有什么区别呢?
public static int test() { System.out.println("aaaa"); return 1; } public static void main(String[] args) { int a[] = new int[]{0,1,2,3,4,5,6,7,8,9,10}; a[test()] += 1; }
可以看到在main方法中调用了test()方法,如果a = a+b和a +=b 的区别没有区别,则会在控制台输出两次aaaa,但是结果呢?
可以看到只有一次,所以这里我们可以确定的 的是a += b执行实际过程实际是 是先计算出a的值,然后用一个temp对象存储,之后和b进行相加,然后将值赋值给a引用。
而a = a+b 的执行过程则是先计算 a + b,然后再赋值给a引用,给a引用的时候如果 引用a 有计算过程,则会再次计算。
实际上这也就是+=运算符 和 +运算符的区别了。
顺便一提,这两个操作符还有一个区别是+=如果两边的操作数的精度不一样时会自动向低转化,如:
实际上和 a = (short)(a+ 65536);是一样的。
而a = a+b则不会自动转化,需要手动进行强制类型转化。