Java运算符结合性决定同优先级运算符的分组方式:左结合(如+、-、&&、|)从左到右,右结合(如=、? :、++)从右到左;结合性仅在优先级相同时生效,优先级不同则先按优先级分组。

Java 运算符的结合性决定了当多个相同优先级的运算符连续出现时,表达式如何分组计算。结合性分为 左结合(从左到右)和 右结合(从右到左)两类,它不决定执行顺序,而是决定操作数与运算符的配对方式。
左结合的运算符(多数二元运算符)
大多数二元运算符(如算术、关系、逻辑、位运算等)都是左结合,即从左向右依次计算。
-
算术运算符:
+、-、*、/、%(除赋值类外的二元运算符基本都左结合)
例如:a - b - c等价于(a - b) - c,不是a - (b - c) -
移位运算符:
<<、>>、>>>a << b >> c解析为(a << b) >> c -
关系与相等运算符:
<、<=、==、!=等
注意:a == b == c在 Java 中非法(因为a == b结果是 boolean,不能与c再用==),但结合性仍为左结合 -
逻辑与/或:
&&、||a && b && c等价于(a && b) && c -
位运算符:
&、^、|a | b ^ c按优先级先算b ^ c,再算a | (b ^ c);若同级如a | b | c,则为(a | b) | c
右结合的运算符(少数特例)
右结合运算符数量少,主要集中在赋值类和一元运算符中,表达式从右向左分组。
-
赋值运算符:
=、+=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=、|=
例如:a = b = c等价于a = (b = c),即先执行b = c,再把结果赋给a(支持链式赋值) -
一元运算符(后缀与前缀):
++、--、+、-、~、!
注意:后缀a++和前缀++a本身不涉及多操作数,但复合使用时体现右结合,如++ ++a合法(解析为++(++a)),而a++ ++非法 -
条件运算符(三元):
? :a ? b : c ? d : e等价于a ? b : (c ? d : e),不是(a ? b : c) ? d : e
容易混淆的点
结合性只在运算符优先级相同时起作用;优先级不同,先按优先级分组,再看结合性。
立即学习“Java免费学习笔记(深入)”;
-
a + b * c:先算b * c(*优先级高于+),再算加法 —— 与结合性无关 -
a = b + c:赋值=优先级低于+,所以一定是a = (b + c),不是结合性决定的,而是优先级 -
a = b = c:两个=优先级相同,此时右结合才生效 →a = (b = c)
实用建议
不必死记所有运算符的结合性,但应掌握常见几类:
- 看到连续赋值(
a = b = c)、连续三元(a ? b : c ? d : e)、连续前缀(!!a)时,默认按右结合理解 - 其他多数表达式(尤其含
+、&&、|等)默认左结合 - 不确定时,用括号显式分组,提高可读性与确定性,例如写成
(a - b) - c或a - (b - c)










