Java运算符计算顺序由优先级和结合性决定:优先级高者先算,同级按左结合(赋值、单目等右结合);类型自动提升,逻辑运算符&&、||具短路特性。

Java 运算符参与表达式计算时,核心靠优先级和结合性决定运算顺序,不是简单从左到右。理解这两点,就能准确预测表达式结果。
运算符优先级决定谁先算
优先级高的运算符先参与计算。比如 *、/、% 优先级高于 +、-,所以:
-
3 + 4 * 2等价于3 + (4 * 2)→ 结果是11 -
10 - 2 * 3 + 4先算2 * 3得6,再按从左到右算10 - 6 + 4→ 结果是8
常见优先级从高到低(简化版):
括号 () > 单目(如 ++、!、-) > 算术(*///% > +/-) > 关系(、<code>==等) > 逻辑(&&、||) > 赋值(=、+=等)
相同优先级看结合性:多数从左向右
当多个同级运算符连用,结合性决定方向。Java 中绝大多数二元运算符(如 +、-、*、/、==、&&)都是左结合:
-
10 - 3 - 2→(10 - 3) - 2=5(不是10 - (3 - 2)) -
a = b = c是右结合 → 等价于a = (b = c),支持链式赋值 -
++和--的前缀/后缀形式也体现结合性差异:后缀i++先用值再自增;前缀++i先自增再用值
类型转换影响计算结果
混合类型运算时,Java 自动按规则提升操作数类型(拓宽转换),避免精度丢失:
立即学习“Java免费学习笔记(深入)”;
-
int a = 5; double b = 2.0; System.out.println(a / b);→2.5(a被提升为double) -
byte x = 1, y = 2; int z = x + y;→ 编译通过,因为x + y结果默认是int,可直接赋给int变量 - 但
byte z = x + y;会报错,需显式强转:byte z = (byte)(x + y);
短路与非短路影响执行逻辑
逻辑运算符 && 和 || 是短路的,左边结果已能确定整体真假时,右边不执行:
-
if (str != null && str.length() > 0)→ 安全,不会因str为null调用length() -
if (str != null & str.length() > 0)(用单&)→ 非短路,str为null时抛NullPointerException - 位运算符
&、|、^总是计算两边,不短路


















