Note book & Life share

Java中 a += b 与 a = a + b的区别

字数统计: 427阅读时长: 1 min
2020/04/12
乍一看,这两句语句的目的都是一样的,但今天却发现其实他们有着细节上的不同。

教材

记得当初上课的时候,教材中写a = a + b;a += b;是一样的,都是在a的基础上加上b的值,在一般使用场景中确实并没有察觉到有什么区别。

但是他们俩真的一样吗?

示例

如下示例展示的a = a + b;的运算方式

1
2
3
4
5
6
7
public class TestAPlusB {
public static void main(String[] args) {
byte a = 1;
a = a + 4;
System.out.println(a);
}
}

IDEA报错:java: 不兼容的类型: 从int转换到byte可能会有损失

再来看如下展示的a += b的运算方式

1
2
3
4
5
6
7
8
9
10
public class TestAPlusB {
public static void main(String[] args) {
byte a = 1;
a += 4;
System.out.println(a);
}
}

输出:
5

可以看到结果是正确的。

原因

因为abyte类型,而数字4默认是int类型。在Java中,a + 4的运算过程中会有一个自动的类型转换,所以结果是一个int类型,而=int类型赋给一个byte类型的变量,编译时就会报错。(当然,可以强转a=(byte)(a+4);,但由报错提示可知,这样的操作会有精度的丢失,在对精度无特别要求时可以这么做)

+=本身是Java中的一个运算符而不是两个,运算时会自动进行类型转换,所以编译的时候不会报错。

总结

当两个变量的数据类型一致时,a = a + b;a += b;是一样的;但是当两个变量的数据类型不一致的时候,就要考虑自动转换带来的精度问题了。

CATALOG
  1. 1. 教材
  2. 2. 示例
  3. 3. 原因
  4. 4. 总结