| 学习指南 EN
AP · Boolean Expressions and If Statements / 布尔表达式与 if 语句 · 阅读约 15 分钟 · 更新于 2026-05-07

布尔表达式与 if 语句 (Boolean Expressions and If Statements) — AP Computer Science A CS A 学习指南

适合谁:AP Computer Science A 参加 AP Computer Science A 的考生。

覆盖内容:布尔运算符、短路求值、复合条件、德摩根定律、等价表达式五大核心考点,以及对应选择题、FRQ题型的解题技巧。

前置知识:基础 Java 或任何其他过程式语言编程。

关于练习题:下文「练习题」一节的所有题目均为我们按 AP Computer Science A 风格编写的原创题目 (original problems),仅用于教学。它们不是 College Board 真题的复制,措辞、数值或语境可能不同。请把它们当作练手用;评分细则请对照 College Board 官方 mark scheme。


1. 什么是布尔表达式与if语句?

布尔表达式(Boolean expression)是返回true(真)或false(假)两种值的表达式,是Java选择逻辑的核心基础;if语句(if statement)则是根据布尔表达式的结果选择执行不同代码块的控制结构。本章节是AP CS A考纲Unit 3的唯一内容,占考试总分的10%-15%,选择题中每年固定考3-5题,FRQ的所有算法类题目都会用到条件判断逻辑,属于必须熟练掌握的核心基础考点。

2. 布尔运算符(Boolean Operators)—— &&, ||, !

布尔运算符是用来组合多个布尔值、生成新布尔值的运算符号,Java中核心的三个运算符规则如下:

  1. 逻辑与(&&:仅当左右两个操作数都为true时,结果为true,否则为false。例如5>3 && 10<20返回true5>3 && 10>20返回false
  2. 逻辑或(||:只要左右任意一个操作数为true,结果就为true,仅当两个都为false时结果为false。例如5>10 || 10<20返回true5>10 || 10>20返回false
  3. 逻辑非(!:一元运算符,对操作数的布尔值取反,truefalsefalsetrue。例如!(5>3)返回false!(5>10)返回true

运算优先级从高到低为:! > && > ||,括号可以改变运算顺序,考官推荐复杂条件优先用括号明确优先级,避免逻辑错误。

3. 短路求值(Short-circuit Evaluation)

短路求值是Java对&&||两个运算符的特殊优化规则:

  • &&:如果左侧操作数已经是false,无论右侧是什么,整体结果一定是false,因此右侧的代码不会被执行。
  • ||:如果左侧操作数已经是true,无论右侧是什么,整体结果一定是true,因此右侧的代码不会被执行。

这个规则的核心作用是提升运行效率,同时可以避免运行时错误,例如:

int a = 0;
boolean res = (a != 0) && (10 / a > 2);

这里a != 0false,右侧的10/a不会运行,因此不会触发除零异常,如果使用非短路的位运算符&则会直接报错,这是选择题高频考点。

4. 复合条件(Compound Conditions)

复合条件指由多个布尔运算符组合而成的布尔表达式,常用于判断复杂的逻辑场景。编写时需注意两点:

  1. 严格遵循运算符优先级,不确定的地方一律加括号,避免逻辑偏差。
  2. 关系运算符的组合要符合逻辑常识,例如判断数字num是否属于[10,20]区间,不能写成10 <= num <=20(Java不支持连续比较),必须写为num >=10 && num <=20

举个实际例子:判断用户输入的年份是否是闰年,规则是能被4整除但不能被100整除,或者能被400整除,对应的复合条件为:

(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)

外层的括号不能省略,否则由于&&优先级高于||,逻辑会变成year %4 ==0 && (year%100 !=0 || year%400 ==0),虽然结果一致,但可读性大幅下降,考官阅卷时会判定为不规范写法。

5. 德摩根定律(De Morgan's Laws)

德摩根定律是布尔表达式等价转换的核心规则,也是AP考试必考点,内容为: $$ \neg(A \land B) \equiv \neg A \lor \neg B $$ $$ \neg(A \lor B) \equiv \neg A \land \neg B $$ 对应Java语法的表述为:

  • !(A && B) 等价于 !A || !B
  • !(A || B) 等价于 !A && !B

简单记忆规则:对复合条件取反时,每个子条件分别取反,同时&&||互换。需要特别注意的是关系运算符取反时要翻转:><=<>===!=,例如!(num > 5 && num < 10)等价于num <=5 || num >=10,很多考生会漏写等于号导致失分。

6. 等价表达式(Equivalent Expressions)

等价布尔表达式指对于任意输入,两个表达式的返回值完全一致,考试中常见题型为给出原表达式,选择逻辑完全等价的选项。判断等价的常用方法有三种:

  1. 真值表法:枚举所有可能的输入值,对比两个表达式的输出是否全部一致,适合只有2-3个变量的场景。
  2. 定律转换法:用德摩根定律、分配律(A && (B || C) ≡ (A && B) || (A && C))、吸收律(A || (A && B) ≡ A)等规则进行代数转换。
  3. 反例排除法:找一个输入让两个表达式返回不同结果,直接排除错误选项,是选择题最高效的解题方法。

例如表达式(a > 0 && b >0) || (a>0 && c>0),用分配律可以简化为a>0 && (b>0 || c>0),两个表达式完全等价。

7. 常见陷阱(Common Pitfalls)

  1. 错误做法:把相等判断符==写成赋值符=,例如if (grade = 90)原因:和赋值操作混淆,若判断的是布尔变量,代码不会编译报错但逻辑完全错误。正确做法:条件判断用==,布尔变量可以直接写if (flag)而非if (flag == true),减少写错概率。
  2. 错误做法:德摩根转换时漏翻转关系运算符,例如!(num > 10)写成!num > 10或者num <10原因:对取反的逻辑边界理解不到位,大于的反面是小于等于,不是小于。正确做法:取反时先翻转关系运算符,再加逻辑非,><=<>===!=
  3. 错误做法:忽略短路求值的副作用,例如写if (x++ >5 || y++ <3)后默认y一定会自增。原因:不知道短路时右侧代码不会执行。正确做法:不要把带副作用的操作(自增、方法调用)放在短路运算符的右侧,若需要两边都执行,改用非短路的&|
  4. 错误做法:复合条件漏加括号导致逻辑偏差,例如想表达「成绩>90 且 出勤>95 或 有竞赛加分」,写为grade >90 && attendance >95 || bonus == true,实际逻辑变成(grade>90 && attendance>95) || bonus == true和需求一致,但如果需求是「成绩>90 且(出勤>95 或有竞赛加分)」,漏加括号就会逻辑错误。原因:忘记&&优先级高于||正确做法:所有复合条件都加括号明确运算顺序。

8. 练习题(AP CS A 风格)

题目1(选择题)

下列哪个表达式和!(score >= 60 && score < 90)完全等价? A. score <60 || score >=90 B. score <60 && score >=90 C. score <=60 || score >90 D. score <=60 && score >90

解答:答案选A。根据德摩根定律,原表达式等价于!(score >=60) || !(score <90),关系运算符取反后>=<<>=,因此结果为score <60 || score >=90,选项B、D用错了运算符,选项C的边界判断错误。

题目2(选择题)

执行以下代码后,变量count的值是多少?

int x = 2, count = 0;
boolean res = (x > 5) || (count++ < 3);

A. 0 B.1 C.2 D.编译错误

解答:答案选B。||左侧x>5false,因此需要执行右侧代码判断结果,count++ <3执行时先判断count=0 <3true,再将count自增为1,因此最终count为1。若左侧为true则右侧不执行,count会保持0。

题目3(FRQ小问)

编写一个布尔表达式,判断乘客可以享受机票折扣的条件:年龄age小于12岁或大于65岁,且购票时间buyDays大于等于14天,或者持有VIP卡isViptrue

解答:正确写法为((age <12 || age >65) && buyDays >=14) || isVip。必须给年龄判断加括号,否则会因为&&优先级高,变成age <12 || (age>65 && buyDays >=14) || isVip,导致小于12岁的乘客无论提前多久购票都能享受折扣,不符合需求。

9. 速查表(Quick Reference Cheatsheet)

知识点 核心规则
布尔运算符优先级 ! > && > `
短路求值 &&左假则右不执行;`
德摩根定律 $!(A && B) \equiv !A |
关系运算符取反 ><=<>===!=
等价恒等式 、$A |

10. 接下来怎么学

布尔表达式与if语句是后续所有控制结构的基础:后续单元的嵌套if、switch选择结构,for、while循环结构,以及数组、ArrayList的遍历筛选、类方法的逻辑判断都会大量用到本章节的知识点,掌握不牢会直接影响后续80%的考点学习。本章节的选择题技巧性较强,建议多刷官方真题的Unit 3专项题,熟悉常见的等价转换和短路求值考法。 如果有任何知识点疑问、练习题不会做,都可以随时到小欧提问,我们会给你针对性的讲解和配套练习。

← 返回章节主页

某道题卡住了?
拍照或粘贴题目 — 小欧(我们的 AI 学习助手)会一步步讲解并配示意图。
免费试用小欧 →