教材
记得当初上课的时候,教材中写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;
是一样的;但是当两个变量的数据类型不一致的时候,就要考虑自动转换带来的精度问题了。