条件判断
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
和 Python 的差别只有三处:条件要用圆括号包起来、代码块用花括号、elif 写作 else if。逻辑完全一样:从上往下查,命中一个就跳出整段。
花括号别省
只有一条语句时,Java 允许省略花括号:
if (score >= 60)
System.out.println("及格");
但请永远不要这么写。 因为哪天你加第二行:
if (score >= 60)
System.out.println("及格");
System.out.println("恭喜"); // ← 这行其实不属于 if,永远执行
缩进骗了你的眼睛,编译器不看缩进。这类 bug 历史上造成过真实的重大安全事故。养成习惯:花括号一个都不省。
逻辑运算符
&& // 与,两边都成立
|| // 或,一边成立即可
! // 非
if (age >= 18 && hasTicket) { ... }
if (age < 6 || age >= 65) { ... }
Java 用符号,Python 用英文单词 and/or/not,这是记混的高发区。
&& 和 || 有个重要特性叫短路求值:a && b 里如果 a 已经是 false,b 根本不会执行。这可以用来防护:
if (name != null && name.length() > 0) { ... }
如果顺序反过来,name 是 null 时会抛 NullPointerException。短路求值救了你。
字符串比较:== 是错的
String a = "hello";
String b = new String("hello");
System.out.println(a == b); // false ← 陷阱
System.out.println(a.equals(b)); // true ← 正确
== 比较的是"是不是同一个对象",equals() 比较的才是"内容一不一样"。字符串比较永远用 .equals(),这是 Java 面试第一题,也是实际项目里的高频 bug。
更稳的写法(避免 name 为 null 时崩溃):
if ("admin".equals(role)) { ... }
把确定不是 null 的字面量放前面。这个小技巧叫 Yoda 条件,能挡掉一大类空指针。
switch:多路分支
分支很多且都是"等于某个固定值"时,switch 比一串 else if 清楚:
int day = 3;
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("周末");
break;
default:
System.out.println("这不是一个合法的星期");
}
break 千万别忘。 没有它,程序会继续往下执行后面所有 case 的代码(叫"贯穿")。上面故意利用了贯穿让 1~5 共用一段代码,但那是有意为之;无意的贯穿是经典 bug。
Java 14 之后有更安全的新写法,不需要 break:
String type = switch (day) {
case 1, 2, 3, 4, 5 -> "工作日";
case 6, 7 -> "周末";
default -> "非法";
};
三元运算符
String result = (score >= 60) ? "及格" : "不及格";
读作:条件成立取问号后面的,否则取冒号后面的。适合简单二选一,别嵌套——嵌套三元没人读得懂。
10 秒自测
"abc" == "abc" 在 Java 里可能是 true 吗?
可能是(因为字符串常量池会复用同一个对象),但你绝不能依赖它。只要有一边是运行时拼出来的,结果就是 false。永远用 .equals()。