『Java 语法基础』a = a + b 与 a += b 的区别
对于 a = a + b
,如果 a
和 b
是 byte、short 或 char 类型的变量,在进行算术运算的时候会首先提升为 int 类型(这称为 类型提升
),然后才执行加法运算。
如果想将结果赋值回 byte、short 或 char 类型的变量,必须进行显式的类型转换,否则编译器会报错,因为 int 类型不能隐式转换为 byte、short 或 char 类型。
例如:
byte a = 10;
byte b = 20;
// 必须显式转换
a = (byte)(a + b);
如果不进行强制类型转换,上述代码会在编译时报错,因为 a + b
的结果是 int 类型。
而对于 a += b
,它是一个复合赋值运算符,它会自动进行类型转换。编译器对于 a += b
运算会自动将赋值操作的结果类型转换为目标变量 a
的类型。因此,使用 +=
进行操作时,不需要显示进行类型转换,哪怕是在处理 byte、short 或 char 类型的变量。
例如:
byte a = 10;
byte b = 20;
// 不需要显式转换,编译器自动处理
a += b;
在这个例子中,a += b
实际上是 a = (byte)(a + b)
的简化形式,编译器会隐式地将加法运算的结果转换回 a
的类型(在这个情况下是 byte)。
因此,总结起来,a = a + b
需要显式的类型转换以避免类型提升带来的问题,而 a += b
则由编译器负责处理类型转换。
完整代码可在此查阅:GitHub