教材
记得当初上课的时候,教材中写a = a + b;与a += b;是一样的,都是在a的基础上加上b的值,在一般使用场景中确实并没有察觉到有什么区别。
但是他们俩真的一样吗?
示例
如下示例展示的a = a + b;的运算方式
1 | public class TestAPlusB { |
IDEA报错:java: 不兼容的类型: 从int转换到byte可能会有损失
再来看如下展示的a += b的运算方式
1 | public class TestAPlusB { |
可以看到结果是正确的。
原因
因为a是byte类型,而数字4默认是int类型。在Java中,a + 4的运算过程中会有一个自动的类型转换,所以结果是一个int类型,而=将int类型赋给一个byte类型的变量,编译时就会报错。(当然,可以强转a=(byte)(a+4);,但由报错提示可知,这样的操作会有精度的丢失,在对精度无特别要求时可以这么做)
而+=本身是Java中的一个运算符而不是两个,运算时会自动进行类型转换,所以编译的时候不会报错。
总结
当两个变量的数据类型一致时,a = a + b;与a += b;是一样的;但是当两个变量的数据类型不一致的时候,就要考虑自动转换带来的精度问题了。