Java运算符面试高分关键在于掌握三类陷阱:自增/自减执行顺序(后缀先用后变、前缀先变后用)、复合赋值隐式类型转换(如s+=1自动强转,s=s+1需手动转)、短路逻辑跳过机制。

Java 运算符面试题拿高分,关键不是背答案,而是吃透三类高频陷阱:自增/自减的执行顺序、复合赋值的隐式类型转换、短路逻辑的跳过机制。这些点看似简单,但90%的候选人栽在细节上。
自增自减:前缀后缀差1毫秒,结果差整轮
面试官最爱考 n = a++ + ++b 这类表达式。核心就一条:后缀(a++)先用原值再加1,前缀(++b)先加1再用新值。
- int a = 3, b = 2; int res = (a++) * (--b); → a 先参与乘法得3,再变4;b 先减1得1,再参与乘法;res = 3 × 1 = 3
- ++ 和 -- 只作用于变量,不能用于字面量或表达式,比如
5++或(a+b)++直接编译报错 - 注意溢出:short s = 127; s++; 编译通过,但运行时 s 变成 -128(有符号溢出)
复合赋值:+= 不是简写,是强制类型转换
s += 1 和 s = s + 1 表面一样,底层完全不同。前者自动处理类型提升,后者会触发隐式转 int 再赋值,导致编译失败。
- short s = 1; s += 1; ✅ 正确,等价于 s = (short)(s + 1)
- short s = 1; s = s + 1; ❌ 报错,s+1 是 int 类型,不能直接赋给 short
- 所有复合赋值(-=、*=、byte b = 120; b += 10; 结果是 -126,不是 130
短路逻辑:&& || 的“跳过”才是考点
面试常问:为什么验证登录要写 username != null && !username.isEmpty(),而不能用 &?答案不在真假,而在执行时机。
立即学习“Java免费学习笔记(深入)”;
- && 左边为 false,右边整个不执行;& 两边一定都算——null.isEmpty() 会抛 NullPointerException
- 同理,|| 左边为 true 就不看右边;| 总是全算
- 位运算符(& | ^ ~)和逻辑运算符(&& || !)操作对象不同:前者对二进制位,后者只接受 boolean;混用会编译错误
关系与引用:== 到底比什么?
String、Integer、自定义对象的 == 判断,是面试必问的“坑中坑”。
- 基本类型:== 比数值,
int a=5, b=5; a==b → true - 引用类型:== 比地址,
new String("a") == new String("a") → false;想比内容必须用equals() - 特殊缓存:Integer 在 [-128,127] 区间内用常量池,
Integer a=100, b=100; a==b → true;但Integer a=200, b=200; a==b → false


















