1. 布尔数据类型:boolean
正如我们已经看到的,Java 有一个非常有用的运算符——if-else。当括号中的条件为真时,它执行第一段代码块;当条件为假时,执行第二段代码块。
为了方便处理可能为真或假的表达式,Java 提供了一个专门的类型——boolean。它最大的特点是,此类型的变量只能取两个值:true(真)和 false(假)。
不能给 boolean 类型的变量赋予其他任何值。编译器不会允许。
boolean 类型变量的示例:
boolean isAdult = true;
boolean hasMoney = false;
boolean 变量只有两个取值——true 和 false。就这样!几乎就像测试结果一样:要么“通过”,要么“失败”。
2. 比较运算
那这个看似原始的类型有什么用呢?当我们构建逻辑表达式时,boolean 的真正威力就体现出来了。通常这些表达式由比较运算符得到。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
| == | 等于 | |
true 或 false |
| != | 不等于 | |
true 或 false |
| > | 大于 | |
true 或 false |
| < | 小于 | |
true 或 false |
| >= | 大于或等于 | |
true 或 false |
| <= | 小于或等于 | |
true 或 false |
示例:
int age = 20;
boolean isAdult = age >= 18; // true(20 大于或等于 18)
boolean isTeenager = age >= 13 && age < 18; // false(20 不小于 18)
boolean isEven = age % 2 == 0; // true(20 能被 2 整除)
这里 isAdult 会变为 true,因为 20 的确是“成年”的年龄。
要点 1:
由两个字符组成的运算符不能拆开写。
a < = 10
speed > = max
age = = 18
time ! = 0
要点 2:
注意,没有运算符 => 和 =<:只有 <= 和 >=。如果你写 a =< 3,你的代码将无法通过编译。
要点 3:
在 Java 中你不能写出 18 < age < 65 这种表达式。因为表达式 18 < age 的结果是 true 或 false。而将 true 与数字(65)比较是不允许的——类型不同。
3. 逻辑运算
在 Java 中不能写 18 < age < 65 这样的表达式——它在语法上不正确,程序不会通过编译。
不过可以这样写:
(18 < age) I (age < 65)
当然,实际中不会使用单词,而是使用逻辑运算符。Java 有三种逻辑运算符:AND(与)、OR(或)和 NOT(非)。
好消息:使用括号,可以构造任意复杂的逻辑表达式。
坏消息:在 Java 中不会使用 and、or、not 这些单词,而是沿用 C 系符号:&&、||、!。
| 逻辑运算 | 期望 | 实际 |
|---|---|---|
| 与 (∧) | and | && |
| 或 (∨) | or | || |
| 非 (¬) | not | ! |
下面是一些在 Java 中使用逻辑运算符的示例:
| 表达式 | 读法 | 说明 |
|---|---|---|
|
(0 < a) and (a < 100) | (0 < a) 且 (a < 100) |
|
(not a) and (not b) | (非 a) 且 (非 b) |
|
not((not a) or (not b)) | 非((非 a)或(非 b)) |
4. 真值表
我们简要回顾一下这些逻辑运算。
AND 运算符
AND 运算符,也叫 与,记作 &&,又称合取、逻辑与、逻辑乘。
| 表达式 | 结果 |
|---|---|
| true && true | true |
| true && false | false |
| false && true | false |
| false && false | false |
OR 运算符
OR 运算符,也叫 或,记作 ||,又称析取、逻辑或、逻辑加。
| 表达式 | 结果 |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
NOT 运算符
NOT 运算符,也叫 非,记作 !,又称取反。
| 表达式 | 结果 |
|---|---|
| ! true | false |
| ! false | true |
一些有用的恒等式:
| 表达式 | 结果 |
|---|---|
| m && !m | false |
| m || !m | true |
| !(a && b) | !a || !b |
| !(a || b) | !a && !b |
5. 逻辑运算示例:and、or、not
“与”(AND)运算,记作 &&
只有两个条件都为真,结果才为真。
int age = 16;
boolean hasTicket = true;
boolean canAttend = age >= 14 && hasTicket; // true(16 大于 14 且有票)
如果你已满 14 岁并且有票,就可以入场!
“或”(OR)运算,记作(||)
只要有一个条件为真,结果就为真。
boolean isAdmin = false;
boolean isModerator = true;
boolean canEdit = isAdmin || isModerator; // true(只要二者之一为 true 就能编辑)
如果你是管理员或版主——请尽情点击按钮!
“非”(NOT)运算,记作(!)
取反会把真变成假,反之亦然。
boolean isWeekend = false;
boolean shouldGoToWork = !isWeekend; // true(如果不是周末,就要上班)
如果不是周末,就该起床了!
组合:构建任意复杂的条件
可以随意组合逻辑运算(当然不要过度)。为了清晰,应该使用括号。
示例:
int age = 17;
boolean hasTicket = false;
boolean isVip = true;
boolean canGo = (age >= 18 && hasTicket) || isVip; // true,因为 isVip = true
逻辑:如果这个人已成年且持票,或者他是 VIP——就放行。若不是 VIP——只有成年且持票才放行。
GO TO FULL VERSION