目录
- 前言
- [一、先搞懂:if 语句的核心逻辑](#一、先搞懂:if 语句的核心逻辑)
- [二、逐个攻破:3 种 if 语句用法(语法 + 例子 + 流程图)](#二、逐个攻破:3 种 if 语句用法(语法 + 例子 + 流程图))
-
- [2.1 单分支 if:满足条件才做事,不满足就跳过](#2.1 单分支 if:满足条件才做事,不满足就跳过)
- [2.2 双分支 if-else:二选一,必执行其中一个](#2.2 双分支 if-else:二选一,必执行其中一个)
- [2.3 多分支 if-else if-else:多选一,按顺序匹配](#2.3 多分支 if-else if-else:多选一,按顺序匹配)
- [三、语法细节补充:这些 "小规则" 决定代码是否能跑通](#三、语法细节补充:这些 “小规则” 决定代码是否能跑通)
-
- [3.1 条件表达式的合法类型](#3.1 条件表达式的合法类型)
- [3.2 代码块的作用域](#3.2 代码块的作用域)
- [3.3 分号的 "坑"](#3.3 分号的 “坑”)
- [四、小白必避的 5 个 "致命坑"](#四、小白必避的 5 个 “致命坑”)
-
- [4.1 坑 1:条件里用`=`代替`==`(最常见)](#4.1 坑 1:条件里用
=代替==(最常见)) - [4.2 坑 2:省略大括号导致代码 "失控"](#4.2 坑 2:省略大括号导致代码 “失控”)
- [4.3 坑 3:多分支条件顺序写反(逻辑混乱)](#4.3 坑 3:多分支条件顺序写反(逻辑混乱))
- [4.4 坑 4:嵌套 if 的 else 匹配错误](#4.4 坑 4:嵌套 if 的 else 匹配错误)
- [4.1 坑 1:条件里用`=`代替`==`(最常见)](#4.1 坑 1:条件里用
- 总结
前言
上一节咱们聊到流程控制里的 "分支结构" 就像给程序装了个 "决策大脑",而if语句就是这个大脑最核心的 "思考工具"。比如 "如果体温超过 37.3℃就需要复测""如果余额不足就提示充值""如果考试分数够高就评优秀",这些生活中随处可见的判断场景,用if语句都能轻松实现。
这一节咱们把if拆解得明明白白:先吃透核心逻辑,再逐个攻破三种分支用法(单分支、双分支、多分支),每个知识点都配超详细语法说明 、生活化例子 、直观流程图,最后汇总新手必避的 "致命坑"------ 保证刚学完变量和运算符的你,不仅会用,还能避开 90% 的错误!
一、先搞懂:if 语句的核心逻辑
if语句的本质,就是模拟人类的 "判断思维"------先设定一个 "判断条件",再明确 "条件成立时做什么""条件不成立时做什么"。
举个生活里的例子:你打算周末出游,会先判断 "天气是否晴朗"(条件):
-
条件成立(晴朗)→ 去公园野餐(执行 A 操作);
-
条件不成立(下雨)→ 在家看电影(执行 B 操作)。
对应到 Java 里,if语句的核心逻辑可以浓缩成一句话:
条件为
true(成立),就走 "成立" 的代码路;条件为false(不成立),就走 "不成立" 的代码路(或跳过)。
这里有两个关键前提,小白必须记牢:
-
「条件」必须是 "布尔表达式"------ 也就是能明确算出
true或false的式子,比如age > 18、score == 100,不能是数字、字符串(比如if (5)、if ("晴天")都是错的); -
「执行代码」必须用
{ }包裹 ------ 哪怕只有一行代码,也建议加{ },否则会出现代码 "失控" 的情况(后面避坑部分会详细说)。
二、逐个攻破:3 种 if 语句用法(语法 + 例子 + 流程图)
if语句有三种核心用法,从简单到复杂逐步升级,覆盖所有日常判断场景。每种用法都先给 "死记硬背" 的语法模板,再配生活例子和代码,最后用流程图直观展示执行路径。
2.1 单分支 if:满足条件才做事,不满足就跳过
适用场景:只需要在 "条件成立" 时执行操作,不成立就啥也不做(或执行后续无关代码)。
语法模板(必须记牢)
java
if (条件表达式) {
// 代码块:条件成立时才执行(1行或多行都可以)
}
// 条件不成立时,直接跳过代码块,执行这里的代码(不受if控制)
语法细节补充
-
(条件表达式):括号不能省略!里面必须是布尔表达式(结果true/false),比如pocketMoney > 50、isStudent == true; -
{ }:称为 "代码块",包裹的代码是一个整体 ------ 条件成立时,会把代码块里的所有代码都执行一遍; -
代码块后面不用加
;:if语句的结束标志是代码块的},不是;,加了;会导致逻辑错误(比如if (a>10); { ... },代码块会无条件执行)。
生活场景:如果零花钱超过 50 元,就买一本漫画书
java
public static void main(String[] args) {
// 定义变量:当前零花钱(单位:元)------之前学的int类型
int pocketMoney = 60;
// 单分支if判断:如果零花钱>50,就执行买漫画的代码
if (pocketMoney > 50) { // 条件:零花钱超过50元(true)
System.out.println("零花钱够啦~");
System.out.println("买一本《海贼王》漫画书!");
System.out.println("剩下的钱买瓶可乐~");
}
// 不管条件成立与否,都会执行这句话(不受if控制)
System.out.println("回家啦~");
}
执行结果(60>50 成立):
Plain
零花钱够啦~
买一本《海贼王》漫画书!
剩下的钱买瓶可乐~
回家啦~
流程图(直观看懂执行路径)

小改动测试
如果把pocketMoney改成 40(条件不成立),执行结果会变成:
Plain
回家啦~
if代码块里的内容全被跳过。
2.2 双分支 if-else:二选一,必执行其中一个
适用场景:需要明确 "条件成立" 和 "条件不成立" 的两种操作,比如 "及格就玩,不及格就刷题""有票就进场,没票就离开"------ 没有第三种选择。
语法模板(必须记牢)
java
if (条件表达式) {
// 代码块1:条件成立时执行
} else {
// 代码块2:条件不成立时执行
}
语法细节补充
-
else:意思是 "否则",后面没有括号,也没有条件 ------ 它永远对应 "前面if条件不成立" 的情况; -
二选一规则:代码块 1 和代码块 2 "必执行且仅执行一个",不会都执行,也不会都不执行;
-
else后面的{ }同样不能省:哪怕代码块 2 只有一行代码,省了{ }可能导致后续代码失控。
生活场景:如果考试及格(≥60 分),就出去玩;否则在家刷题
java
public static void main(String[] args) {
// 定义变量:考试分数------之前学的int类型
int examScore = 58;
// 双分支判断:及格与否二选一
if (examScore >= 60) { // 条件:分数≥60(false)
System.out.println("分数:" + examScore + "分");
System.out.println("及格啦!约同学去打球~");
} else { // 条件不成立时执行
System.out.println("分数:" + examScore + "分");
System.out.println("没及格,在家刷《Java基础100题》~");
}
}
执行结果(58≥60 不成立):
Plain
分数:58分
没及格,在家刷《Java基础100题》~
流程图(直观看懂执行路径)

小改动测试
如果把examScore改成 65(条件成立),执行结果会变成:
Plain
分数:65分
及格啦!约同学去打球~
2.3 多分支 if-else if-else:多选一,按顺序匹配
适用场景:有多个条件需要依次判断,比如 "根据分数评等级""根据月份判断季节"------ 按顺序匹配,只执行第一个成立的条件。
语法模板(必须记牢)
java
if (条件1) {
// 代码块1:条件1成立时执行
} else if (条件2) {
// 代码块2:条件1不成立,但条件2成立时执行
} else if (条件3) {
// 代码块3:条件1、2都不成立,但条件3成立时执行
} else {
// 代码块4:所有条件都不成立时执行(可选,可省略)
}
语法细节补充
-
顺序优先:必须按 "条件范围从窄到宽" 或 "优先级从高到低" 排序,比如评等级要先判断 90+(窄范围),再判断 80+,最后判断 60+(宽范围);
-
唯一执行:只要有一个条件成立,执行对应的代码块后,就会跳过后面所有的
else if和else,不会再判断; -
else可选:如果所有条件都不成立,且没有else,则多分支语句什么都不执行,直接往下走。
生活场景:根据期末成绩评等级(90 + 优秀,80-89 良好,60-79 及格,<60 不及格)
java
public static void main(String[] args) {
// 定义变量:期末成绩------之前学的int类型
int finalScore = 85;
// 多分支判断:按顺序匹配条件(从窄范围到宽范围)
if (finalScore >= 90) { // 条件1:90+(最窄)
System.out.println("成绩:" + finalScore + "分 → 等级:优秀");
} else if (finalScore >= 80) { // 条件2:80-89(次窄)
System.out.println("成绩:" + finalScore + "分 → 等级:良好");
} else if (finalScore >= 60) { // 条件3:60-79(较宽)
System.out.println("成绩:" + finalScore + "分 → 等级:及格");
} else { // 所有条件都不成立(<60)
System.out.println("成绩:" + finalScore + "分 → 等级:不及格");
}
}
执行结果(85≥90 不成立,85≥80 成立):
Plain
成绩:85分 → 等级:良好
流程图(直观看懂执行路径)

小改动测试
如果把finalScore改成 55(所有条件都不成立),执行结果会变成:
Plain
成绩:55分 → 等级:不及格
三、语法细节补充:这些 "小规则" 决定代码是否能跑通
除了上面的核心用法,还有几个语法细节,小白容易忽略,但直接影响代码是否能编译通过:
3.1 条件表达式的合法类型
-
只能是布尔类型(
true/false),以下情况都不合法:-
数字类型:
if (5)、if (score)(错,5 和 score 是 int,不是布尔值); -
字符串类型:
if ("及格")(错,字符串不能直接作为条件); -
赋值语句:
if (age = 18)(错,=是赋值,不是判断,结果是 18,不是布尔值)。
-
-
合法的条件表达式示例:
-
关系运算:
age > 18、score == 100、height <= 120; -
逻辑运算:
isStudent && hasID(既是学生又有身份证)、isRain || isWind(下雨或刮风); -
布尔变量:
if (isPass)(等价于if (isPass == true))、if (!isRain)(等价于if (isRain == false))。
-
3.2 代码块的作用域
-
代码块里的变量,只能在代码块内部使用,外部无法访问:
javaif (score >= 60) { String result = "及格"; System.out.println(result); // 合法,在代码块内 } System.out.println(result); // 报错!result是代码块内的变量,外部无法访问 -
代码块外部的变量,代码块内部可以访问:
javaString name = "小明"; if (score >= 60) { System.out.println(name + "及格了"); // 合法,能访问外部变量name }
3.3 分号的 "坑"
-
if后面不能加;:加了;会导致代码块无条件执行(;表示if语句结束):javaif (score >= 60); { // 这里加了;,if语句已经结束 System.out.println("及格"); // 不管score是否≥60,都会执行 } -
代码块内部的语句需要加
;:每个执行语句结尾必须加;,比如System.out.println("及格");。
四、小白必避的 5 个 "致命坑"
这 5 个坑是新手最常犯的,每个都附了错误示例、正确示例和后果说明,一定要记牢!
4.1 坑 1:条件里用=代替==(最常见)
-
错误示例:
javaint age = 18; if (age = 18) { // 错把赋值"="当判断"==" System.out.println("成年了"); } -
后果 :编译报错!
age = 18是赋值语句,结果是 18(int 类型),而if条件必须是布尔类型(true/false),类型不匹配。 -
正确示例:
javaif (age == 18) { // 用"=="判断是否相等 System.out.println("成年了"); }
4.2 坑 2:省略大括号导致代码 "失控"
-
错误示例:
javaint score = 55; if (score >= 60) System.out.println("及格"); System.out.println("可以玩游戏"); // 不受if控制,永远执行 -
后果 :不管
score是否≥60,"可以玩游戏" 都会打印 ------ 因为省略{ }时,if只控制紧跟的第一行代码,后面的代码是独立的,不受条件影响。 -
正确示例:
javaif (score >= 60) { System.out.println("及格"); System.out.println("可以玩游戏"); // 只有条件成立才执行 }
4.3 坑 3:多分支条件顺序写反(逻辑混乱)
-
错误示例:
javaint score = 85; if (score >= 60) { // 先判断宽范围(60+),85分会直接匹配 System.out.println("及格"); } else if (score >= 80) { // 永远不会执行! System.out.println("良好"); } -
后果:85 分明明该评 "良好",却被当成 "及格"------ 因为条件顺序从宽到窄,先匹配到宽范围,后面的窄范围条件永远没机会判断。
-
正确示例:
javaif (score >= 80) { // 先判断窄范围(80+) System.out.println("良好"); } else if (score >= 60) { // 再判断宽范围(60+) System.out.println("及格"); }
4.4 坑 4:嵌套 if 的 else 匹配错误
-
错误示例:
javaint a = 3; int b = 5; if (a > 2) if (b > 10) System.out.println("b很大"); else // else默认匹配最近的if(即b>10),不是外层的a>2! System.out.println("a不大"); -
后果 :逻辑混乱!
else实际匹配的是内层if (b>10),而不是外层if (a>2)------ 当b=5时,b>10不成立,会执行else的 "a 不大",但a=3明明大于 2,明显矛盾。 -
正确示例:
javaif (a > 2) { // 用大括号明确外层if的范围 if (b > 10) { System.out.println("b很大"); } } else { // 明确匹配外层if System.out.println("a不大"); }
总结
这一节咱们把if语句的核心逻辑、三种用法、语法细节和避坑指南全讲透了,记住 3 个核心点:
-
核心逻辑:
if是 "判断工具",条件true执行对应代码块,false执行 else(或跳过); -
三种用法:单分支(满足才做)、双分支(二选一)、多分支(多选一,顺序优先);
-
避坑关键:条件用
==不用=、必加大括号、多分支条件从窄到宽排、条件必须是布尔值。