|
|
@@ -125,7 +125,8 @@ public class Demo01 {
|
|
|
| **比较运算符** | ✅ 本次课程重点 |
|
|
|
| **逻辑运算符** | ✅ 本次课程重点 |
|
|
|
| **位运算符** | ✅ 本次课程重点 |
|
|
|
-| 三目运算符 | 后续课程讲解 |
|
|
|
+| **三目运算符** | ✅ 本次课程重点 |
|
|
|
+| **运算符优先级** | ✅ 本次课程重点 |
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -684,6 +685,138 @@ public class Demo06 {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+---
|
|
|
+
|
|
|
+### 7. 三目运算符(三元运算符)
|
|
|
+
|
|
|
+三目运算符是 Java 中唯一一个需要**三个操作数**的运算符。
|
|
|
+
|
|
|
+**语法格式:**
|
|
|
+
|
|
|
+```java
|
|
|
+布尔表达式 ? 表达式1 : 表达式2
|
|
|
+```
|
|
|
+
|
|
|
+**执行逻辑:**
|
|
|
+- 如果布尔表达式结果为 `true`,执行(返回)**表达式1**
|
|
|
+- 如果布尔表达式结果为 `false`,执行(返回)**表达式2**
|
|
|
+
|
|
|
+#### 示例
|
|
|
+
|
|
|
+```java
|
|
|
+System.out.println(15 > 8 ? "hello" : "哈哈哈哈"); // hello
|
|
|
+System.out.println(15 > 8 ? 6 : "哈哈哈哈"); // 6(返回 int)
|
|
|
+```
|
|
|
+
|
|
|
+```java
|
|
|
+int x = 10, y = 6;
|
|
|
+System.out.println(x > y ? "x>y" : "x<=y"); // x>y
|
|
|
+System.out.println(x > y ? "x>y" : y); // x>y(返回 String)
|
|
|
+```
|
|
|
+
|
|
|
+#### 三目运算符 vs if-else 选择原则
|
|
|
+
|
|
|
+| 场景 | 推荐使用 |
|
|
|
+|------|---------|
|
|
|
+| 简单的二选一赋值 | 三目运算符 |
|
|
|
+| 复杂多个分支逻辑 | `if-else` |
|
|
|
+| 嵌套超过 2 层 | `if-else`(三目嵌套可读性差) |
|
|
|
+| 需要执行某段代码而不是返回一个值 | `if-else` |
|
|
|
+
|
|
|
+**完整代码 —— Demo07.java**
|
|
|
+
|
|
|
+```java
|
|
|
+/**
|
|
|
+ * @author WanJl
|
|
|
+ * @version 1.0
|
|
|
+ * @title Demo07
|
|
|
+ * @description 三目运算符 三元运算符
|
|
|
+ * @create 2026/7/14
|
|
|
+ */
|
|
|
+public class Demo07 {
|
|
|
+ public static void main(String[] args) {
|
|
|
+ /*
|
|
|
+ 三目运算符
|
|
|
+ 布尔表达式?表达式1:表达式2
|
|
|
+ 布尔表达式的结果如果是true,就执行表达式1,否则执行表达式2
|
|
|
+ */
|
|
|
+ System.out.println(15 > 8 ? "hello" : "哈哈哈哈");
|
|
|
+ System.out.println(15 > 8 ? 6 : "哈哈哈哈");
|
|
|
+ int x = 10, y = 6;
|
|
|
+ System.out.println(x > y ? "x>y" : "x<=y");
|
|
|
+ System.out.println(x > y ? "x>y" : y);
|
|
|
+
|
|
|
+ /*
|
|
|
+ 什么时候使用三元运算符,什么时候使用if...else
|
|
|
+ 如果是简单的二选一赋值 → 三元运算符
|
|
|
+ 复杂多个分支逻辑 → if...else
|
|
|
+ 嵌套超过2层 → if...else
|
|
|
+ 需要执行某段代码而不是返回一个值 → if...else
|
|
|
+ */
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 8. 运算符优先级
|
|
|
+
|
|
|
+运算符优先级决定了表达式中的计算顺序。优先级越高,越先被计算。
|
|
|
+
|
|
|
+| 优先级 | 运算符 | 说明 |
|
|
|
+|--------|--------|------|
|
|
|
+| 1(最高) | `()` `.` `[]` | 括号、成员访问、数组下标 |
|
|
|
+| 2 | `++` `--` `+`(正)`-`(负) | 自增、自减、正负号 |
|
|
|
+| 3 | `*` `/` `%` | 乘、除、取余 |
|
|
|
+| 4 | `+` `-` | 加、减 |
|
|
|
+| 5 | `<<` `>>` `>>>` | 移位运算 |
|
|
|
+| 6 | `<` `>` `<=` `>=` | 比较(instanceof) |
|
|
|
+| 7 | `==` `!=` | 等于、不等于 |
|
|
|
+| 8 | `&` | 按位与 |
|
|
|
+| 9 | `^` | 按位异或 |
|
|
|
+| 10 | `\|` | 按位或 |
|
|
|
+| 11 | `&&` | 短路与 |
|
|
|
+| 12 | `\|\|` | 短路或 |
|
|
|
+| 13 | `?:` | 三目运算符 |
|
|
|
+| 14(最低) | `=` `+=` `-=` `*=` `/=` `%=` | 赋值运算符 |
|
|
|
+
|
|
|
+> **记忆口诀**:括号最高,单目第二,乘除第三,加减第四,移位第五,比较第六,等于第七,位逻辑(`&` `^` `|`)第八到十,短路逻辑(`&&` `||`)十一十二,三目十三,赋值最后。
|
|
|
+>
|
|
|
+> **最佳实践**:当不确定优先级时,使用 `()` 明确指定计算顺序,提高代码可读性。
|
|
|
+
|
|
|
+**完整代码 —— Demo08.java**
|
|
|
+
|
|
|
+```java
|
|
|
+/**
|
|
|
+ * @author WanJl
|
|
|
+ * @version 1.0
|
|
|
+ * @title Demo08
|
|
|
+ * @description 运算符优先级
|
|
|
+ * @create 2026/7/14
|
|
|
+ */
|
|
|
+public class Demo08 {
|
|
|
+ public static void main(String[] args) {
|
|
|
+ /*
|
|
|
+ 运算符优先级决定了表达式中的计算顺序
|
|
|
+ 最高优先级:() . []
|
|
|
+ 2 ++ -- +正数 -负数
|
|
|
+ 3 * / %
|
|
|
+ 4 + -
|
|
|
+ 5 << >> >>>
|
|
|
+ 6 < > <= >=
|
|
|
+ 7 == !=
|
|
|
+ 8 &
|
|
|
+ 9 ^
|
|
|
+ 10 |
|
|
|
+ 11 &&
|
|
|
+ 12 ||
|
|
|
+ 13 ?: 三元运算符
|
|
|
+ 14 各种赋值 = += -=
|
|
|
+ */
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
结合 if-else 分支结构与算术运算符,完成以下练习:
|
|
|
|
|
|
### 练习 1:判断奇偶数
|
|
|
@@ -1090,6 +1223,73 @@ public class Demo06 {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+### Demo07.java — 三目运算符
|
|
|
+
|
|
|
+```java
|
|
|
+/**
|
|
|
+ * @author WanJl
|
|
|
+ * @version 1.0
|
|
|
+ * @title Demo07
|
|
|
+ * @description 三目运算符 三元运算符
|
|
|
+ * @create 2026/7/14
|
|
|
+ */
|
|
|
+public class Demo07 {
|
|
|
+ public static void main(String[] args) {
|
|
|
+ /*
|
|
|
+ 三目运算符
|
|
|
+ 布尔表达式?表达式1:表达式2
|
|
|
+ 布尔表达式的结果如果是true,就执行表达式1,否则执行表达式2
|
|
|
+ */
|
|
|
+ System.out.println(15 > 8 ? "hello" : "哈哈哈哈");
|
|
|
+ System.out.println(15 > 8 ? 6 : "哈哈哈哈");
|
|
|
+ int x = 10, y = 6;
|
|
|
+ System.out.println(x > y ? "x>y" : "x<=y");
|
|
|
+ System.out.println(x > y ? "x>y" : y);
|
|
|
+
|
|
|
+ /*
|
|
|
+ 什么时候使用三元运算符,什么时候使用if...else
|
|
|
+ 如果是简单的二选一赋值 → 三元运算符
|
|
|
+ 复杂多个分支逻辑 → if...else
|
|
|
+ 嵌套超过2层 → if...else
|
|
|
+ 需要执行某段代码而不是返回一个值 → if...else
|
|
|
+ */
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### Demo08.java — 运算符优先级
|
|
|
+
|
|
|
+```java
|
|
|
+/**
|
|
|
+ * @author WanJl
|
|
|
+ * @version 1.0
|
|
|
+ * @title Demo08
|
|
|
+ * @description 运算符优先级
|
|
|
+ * @create 2026/7/14
|
|
|
+ */
|
|
|
+public class Demo08 {
|
|
|
+ public static void main(String[] args) {
|
|
|
+ /*
|
|
|
+ 运算符优先级决定了表达式中的计算顺序
|
|
|
+ 最高优先级:() . []
|
|
|
+ 2 ++ -- +正数 -负数
|
|
|
+ 3 * / %
|
|
|
+ 4 + -
|
|
|
+ 5 << >> >>>
|
|
|
+ 6 < > <= >=
|
|
|
+ 7 == !=
|
|
|
+ 8 &
|
|
|
+ 9 ^
|
|
|
+ 10 |
|
|
|
+ 11 &&
|
|
|
+ 12 ||
|
|
|
+ 13 ?: 三元运算符
|
|
|
+ 14 各种赋值 = += -=
|
|
|
+ */
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
---
|
|
|
|
|
|
## 五、随堂练习要点
|
|
|
@@ -1120,6 +1320,9 @@ public class Demo06 {
|
|
|
24. **无符号右移 `>>>`**:低位丢失,高位补 0,负数会变为大正数
|
|
|
25. **成绩等级练习**:综合运用 `if-else if-else` + 比较运算符 + 逻辑运算符 `&&` 实现多范围判断
|
|
|
26. **位运算随堂练习**:计算 `15>>3`、`66<<2`、`75&86`、`63|36`、`-128>>>3` 的运行结果
|
|
|
+27. **三目运算符**:`布尔表达式 ? 表达式1 : 表达式2`,简化二选一赋值
|
|
|
+28. **三目 vs if-else**:简单二选一赋值用三目,复杂多分支用 `if-else`
|
|
|
+29. **运算符优先级**:牢记 `()` 最高、赋值最低,不确定时用 `()` 明确顺序
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -1137,3 +1340,6 @@ public class Demo06 {
|
|
|
| **补码** | 计算机使用补码表示负数,正数的补码 = 原码,负数的补码 = 原码取反 + 1 |
|
|
|
| **按位与 `&` vs 逻辑与 `&`** | 按位与操作整型的二进制位,逻辑与操作布尔值 |
|
|
|
| **位运算性能** | 位运算直接操作二进制位,比算术运算性能更高,常用于底层编程 |
|
|
|
+| **三目运算符** | 唯一的三元运算符,格式 `? :`,适合简单的二选一赋值 |
|
|
|
+| **运算符优先级** | 优先级高的运算符先执行,建议用 `()` 明确计算顺序 |
|
|
|
+| **短路逻辑 vs 非短路逻辑** | `&&`/`||` 有短路效果,`&`/`|` 无短路效果,性能上短路更优 |
|