第 4 课 / 共 9 课15 分钟2 个闯关

if / switch 与字符串比较

== 和 equals 的区别,这是 Java 面试第一题。

条件判断

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()

广告位(未配置 AdSense,上线后在此展示)

动手闯关

读懂了不算会,写出来才算

0/2 已通过

闯关和判题完全免费,交错了不扣任何东西。卡住随时点「问 AI」,它能看到你正在写的代码。

关卡 01选择+10 点 · +15 XP

字符串该怎么比

判断两个字符串**内容**是否相同,正确写法是?

  • 可能是多选,选错不扣点数,随便试。
登录后闯关拿点数
关卡 02写代码+15 点 · +25 XP

成绩等级判定(Java 版)

读入一个整数分数,输出等级:90+ 为 `优秀`,80~89 为 `良好`,60~79 为 `及格`,其余 `不及格`。

示例输入

95

应该输出

优秀
javaTab 缩进 4 空格

学完了?标记一下

标记完成会记进度、涨 20 XP,还会点亮连续学习天数。