Java中赋值运算符(=)将右侧值赋给左侧变量,复合赋值运算符(如+=)先执行对应运算再赋值,更简洁安全;复合赋值隐式支持窄化转换,而显式写法需手动强转。

Java 中赋值运算符(=)用于将右侧表达式的值存入左侧变量,而复合赋值运算符(如 +=、-= 等)则在赋值前自动执行对应算术或位运算,写法更简洁、语义更明确。
基础赋值运算符 =
它是最基本的赋值方式,把右边的值“拷贝”给左边的变量。注意:左边必须是变量(或能被赋值的表达式),右边可以是任意合法表达式。
- 支持基本类型和引用类型:例如
int x = 10;、String s = "hello"; - 支持链式赋值(仅限同一类型):如
int a = b = c = 5;,等价于c = 5; b = c; a = b; - 赋值本身有返回值(即右操作数的值),所以可嵌套使用:如
if ((x = getValue()) != null),但需谨慎避免可读性问题
常用复合赋值运算符
复合赋值运算符形如 op=(如 +=),等价于「左操作数 = 左操作数 op 右操作数」,但更安全、更高效——尤其对表达式中的左操作数只计算一次。
-
+=:加后赋值,a += b≡a = a + b -
-=:减后赋值,a -= b≡a = a - b -
*=、/=、%=:分别对应乘、除、取余 -
&=、|=、^=:按位与、或、异或赋值 -
<<=、>>=、>>>=:位移后赋值
复合赋值的隐式类型转换规则
这是容易出错的关键点:复合赋值会自动进行窄化转换(cast),只要结果在目标类型范围内就合法;而显式写法则可能编译失败。
立即学习“Java免费学习笔记(深入)”;
- 例如:
short s = 10; s += 5;✅ 合法(编译器自动插入(short)转换) - 但:
short s = 10; s = s + 5;❌ 编译错误(s + 5是int类型,不能直接赋给short) - 原理:
s += 5等价于s = (short)(s + 5),JVM 规范保证该隐式转换存在
使用建议与注意事项
合理使用能提升代码可读性和健壮性,但也要避开常见陷阱。
- 优先用复合赋值代替重复变量名的显式表达式,减少出错概率(比如少打一个字母)
- 避免在复合赋值右侧使用有副作用的表达式(如
i += func()),除非你明确需要且理解执行顺序 - 注意浮点数精度问题:
double d = 1.1; d += 0.1;结果仍是近似值,不是数学意义上的精确累加 - 字符串拼接中
+=实际调用StringBuilder,效率优于多次+,但大量拼接仍建议直接用StringBuilder


















