Java运算符优先级决定了表达式中各个运算符的执行先后顺序,很多面试中出现的代码片段看似简单,实际运行结果却常常超出开发者预期,本质都是优先级规则理解不到位导致的。下面通过多道经典真题来解析相关知识点。

真题一:自增运算符与算术运算符的优先级问题
先看下面这段代码,很多开发者会误以为输出结果是11,实际运行结果却不同:
public class OperatorDemo1 {
public static void main(String[] args) {
int a = 5;
int b = a + a++;
System.out.println(b);
}
}
这里需要先明确两个规则:自增运算符++的优先级高于算术运算符+,同时后置自增的逻辑是先使用变量当前值参与运算,再对变量进行加1操作。
执行流程是:a的初始值是5,a++先取5参与运算,此时a还是5,所以a + 5的结果是10,之后a自增为6,最终b的值是10,输出结果为10。
真题二:逻辑运算符的短路特性与优先级
逻辑运算符的优先级和短路特性结合也是常考内容,看下面代码:
public class OperatorDemo2 {
public static void main(String[] args) {
int x = 3;
int y = 4;
boolean result = x > 5 && y++ > 3;
System.out.println(result);
System.out.println(y);
}
}
首先要知道逻辑与&&的优先级高于逻辑或||,且&&有短路特性:如果左侧表达式为false,右侧表达式不会执行。
执行流程:x是3,x > 5的结果是false,&&左侧为false,右侧y++ > 3不会执行,所以y的值还是4,result的结果是false,最终输出false和4。
真题三:赋值运算符与三元运算符的优先级
赋值运算符的优先级是比较低的,结合三元运算符时容易出错,看下面代码:
public class OperatorDemo3 {
public static void main(String[] args) {
int m = 10;
int n = 20;
int max = m > n ? m : n;
System.out.println(max);
}
}
这里三元运算符的优先级高于赋值运算符,所以会先计算m > n ? m : n的结果,再赋值给max。
m是10,n是20,m > n为false,所以三元表达式的结果是n的值20,赋值给max,最终输出20。
常见运算符优先级汇总表
为了方便记忆,整理常见运算符的优先级从高到低如下:
| 优先级 | 运算符类型 | 示例运算符 |
|---|---|---|
| 1 | 括号 | ()、[] |
| 2 | 自增、自减、逻辑非 | ++、--、! |
| 3 | 算术运算符(乘除取模) | *、/、% |
| 4 | 算术运算符(加减) | +、- |
| 5 | 比较运算符 | >、<、>=、<=、==、!= |
| 6 | 逻辑与 | && |
| 7 | 逻辑或 | || |
| 8 | 三元运算符 | ? : |
| 9 | 赋值运算符 | =、+=、-=等 |
避免优先级问题的实用技巧
如果不确定运算符的优先级,最稳妥的方式是使用括号明确执行顺序,比如上面的真题一可以写成int b = a + (a++);,这样代码的可读性会更高,也避免了因优先级记忆模糊导致的错误。同时建议在编写复杂表达式时,尽量拆分成多行代码,降低理解难度。
Java运算符优先级面试真题Java基础运算符规则修改时间:2026-06-28 07:15:25