Java运算符面试核心在于理解执行顺序、副作用及JVM行为。重点包括:自增/自减的取值与修改时机;短路逻辑对异常预防的作用;位运算中的符号扩展;三元运算符右结合性及嵌套陷阱。

Java 运算符专家级面试题,核心不在背规则,而在理解执行顺序、副作用和 JVM 行为。真正拉开差距的,是能否一眼识别“表面简单、实则陷阱”的表达式,并准确还原字节码层面的求值过程。
自增/自减组合表达式的求值逻辑
这是高频重灾区。关键不是记住结果,而是厘清“取值时机”和“修改时机”:
- ++i 是“先改后取”:i 的值立即加 1,整个表达式返回新值
- i++ 是“先取后改”:表达式返回旧值,语句结束前 i 才加 1
-
赋值操作会覆盖中间状态:比如
j = j++,本质是“取 j 当前值 → j 自增 → 把旧值赋回 j”,所以 j 不变
短路逻辑的实际影响
&& 和 || 的短路特性不只是性能优化,更是防止运行时异常的关键:
-
str != null && !str.isEmpty()安全:str 为 null 时,!str.isEmpty()根本不执行 -
str != null & !str.isEmpty()危险:即使 str 为 null,右侧仍会执行,触发 NullPointerException - 面试常考:
false && methodA() || true || methodB()—— methodA() 不执行,methodB() 也不执行(|| 左侧已为 true)
位运算与符号扩展的隐含转换
位运算涉及类型提升和符号位处理,容易忽略细节:
立即学习“Java免费学习笔记(深入)”;
-
~a对 int 类型取反,结果是负数(补码表示),不是简单“0变1、1变0”后的正整数 a 左移时,高位溢出丢弃,低位补 0;<code>a >> n是算术右移(保留符号位),a >>> n是逻辑右移(高位补 0)- 例如:
int x = -1; System.out.println(x >> 31); // 输出 -1(符号位复制)
三元运算符嵌套与优先级陷阱
?: 是右结合,但易被误读为左结合。复杂嵌套必须加括号明确意图:
-
a > b ? a : b > c ? c : d等价于a > b ? a : (b > c ? c : d),不是(a > b ? a : b) > c ? c : d - 实际开发中,超过一层嵌套就应拆成 if-else 或提取变量,可读性远比炫技重要
- 面试若问执行顺序,直接画出语法树或分步代入数值验证,比背口诀更可靠


















