1、对于同样类型的a,b来说
两个式子执行的结果确实没有什么区别。但是从编译的角度看吧(武让说的),a+=b;执行的时候效率高。
2、对于不同类型的a,b来说
2.1 不同类型的两个变量在进行运算的时候,我们经常说到的是类型的转换问题。这里,记住两点:一、运算过程中,低精度的类型向高精度类型转换。二、如果将高精度的数值赋值给低精度类型变量,则必须要进行显性的强制转换。
2.2 对于a+=b;这个式子,要明确的一点是,+=运算中,结合了强制类型转换的功能,因此,不会出现编译错误;而对于a=a+b;这个式子,因为是简单的运算,没有类型转换,在编译过程中会报错,代码如下:
- public class Test{
- public Test(){
- int a = 5;
- char b = 3;
- b+=a;//编译通过
- b=a+b;//编译出错
- }
- public static void main(String[] args){
- Test t = new Test();
- }
- }
要想改正上面的错误,只要像这样写:
- public class Test{
- public Test(){
- int a = 5;
- char b = 3;
- b+=a;
- b=(char)(a+b);//编译通过
- }
- public static void main(String[] args){
- Test t = new Test();
- }
- }
因此,总的来说,a=a+b;和a+=b;并不是任何时候都等价,也要分情况的。