找工作笔试的时候,条件判断题几乎是必考项。别看它简单,真写起来不少人还是会掉坑里。尤其是那些看似 straightforward 的 if-else、三元运算符和逻辑判断,稍不注意就出错。
常见题目长啥样?
比如这道题:
int x = 5;
if (x > 3 || x < 10 && false) {
printf("Hello");
} else {
printf("World");
}
你觉得输出什么?很多人一看 x 在 3 到 10 之间,直接选 Hello。但忽略了逻辑优先级——&& 比 || 优先级高。实际等价于:
if (x > 3 || (x < 10 && false))
右边是 false,左边是 true,整体为 true,所以还是输出 Hello。这题考的就是运算符优先级,不是逻辑本身。
容易混淆的布尔表达式
再来看一个经典陷阱:
boolean flag = true;
if (!flag == false) {
System.out.println("A");
} else {
System.out.println("B");
}
!flag 是 false,然后判断 false == false,结果是 true,走 A 分支。有些人会误以为 !flag == false 等同于 flag,其实只要记住运算顺序:先取反,再比较。
三元运算符嵌套也常考
面试官喜欢用一行代码考你反应:
int a = 2, b = 3, c = 4;
int result = a > b ? a : b > c ? b : c;
这个没有括号,得清楚三元运算是右结合。实际执行是:
a > b ? a : (b > c ? b : c)
a 不大于 b,所以取后面部分。b 不大于 c,所以最终 result = c = 4。如果没掌握结合性,很容易算成 3。
字符串判断别想当然
Java 里有个经典错误:
String s = null;
if (s != null && s.equals("hello")) {
// 安全执行
}
这个写法是对的,短路与保证了前面为 false 就不会执行后面。但如果把顺序换一下:
if (s.equals("hello") && s != null)
直接空指针异常。笔试时经常拿这种顺序做文章,考你对短路机制的理解。
实际开发中的应用
这些题看着像理论,其实工作中天天用。比如写个登录逻辑:
if (username == null || password == null || username.isEmpty() || password.length() < 6) {
throw new IllegalArgumentException();
}
这几个条件怎么排列,不仅影响可读性,还关系到异常触发时机。笔试题练多了,写代码自然更严谨。
多刷几道题,把常见的优先级、结合性、短路规则摸熟,这类题基本就不会错了。关键不是死记,而是理解执行流程。”}