跳转至

03 运算符与表达式

本章目标

  • 掌握算术、赋值、比较、逻辑、三元运算符
  • 理解运算符优先级
  • 会用常见运算符解决实际问题

3.1 算术运算符

运算符 含义 例子 结果
+ 加 5 + 3 8
- 减 5 - 3 2
* 乘 5 * 3 15
/ 除 5 / 2 2(整数除法!)
% 取余 5 % 2 1
int a = 17;
System.out.println(a / 5);   // 3
System.out.println(a % 5);   // 2

取余 % 的常见用法

  • 判断奇偶:n % 2 == 0 是偶数
  • 限制范围:n % 10 得到 0~9
  • 模组里:tick % 20 == 0 表示"每 20 tick(1 秒)执行一次"

自增自减

int i = 5;
i++;        // i 变成 6(i = i + 1)
i--;        // i 变回 5
++i;        // 先加再用
i++;        // 先用再加
int a = 5;
int b = a++;    // b = 5,然后 a = 6(先用后加)
int c = ++a;    // a = 7,然后 c = 7(先加后用)

坑

a++ 和 ++a 单独用时没区别;放进表达式里就有区别。建议新手不要写在复杂表达式里,容易出错。

3.2 赋值运算符

运算符 等价于
+= a = a + 5
-= a = a - 5
*= a = a * 5
/= a = a / 5
%= a = a % 5
int score = 100;
score += 20;    // 120
score *= 2;     // 240

3.3 比较运算符

结果都是 boolean:

运算符 含义 例子
== 相等 a == b
!= 不相等 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b
int hp = 10;
boolean dead = hp <= 0;    // false

== 判断字符串的坑

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);      // false!比较的是地址
System.out.println(s1.equals(s2)); // true !这才是比内容
字符串比较内容必须用 .equals(),不要用 ==。模组里判断物品 ID、注册名时经常踩这个坑。

3.4 逻辑运算符

运算符 含义 例子
&& 且(and) a > 0 && a < 10
\|\| 或(or) a < 0 \|\| a > 10
! 非(not) !flag
int level = 30;
boolean canEnter = level >= 20 && level < 60;   // 20 <= level < 60

boolean isAdmin = true;
boolean isOp = false;
boolean canUseCmd = isAdmin || isOp;            // true

短路特性

&& 左边为 false 时,右边不会执行;|| 左边为 true 时,右边不执行。这在防止空指针时很常用:

String name = null;
if (name != null && name.length() > 0) {   // 安全:左边 false 就不会执行右边
    System.out.println(name);
}

3.5 三元运算符

条件 ? 值1 : 值2

int score = 85;
String grade = score >= 60 ? "及格" : "不及格";
System.out.println(grade);   // 及格

等价于:

String grade;
if (score >= 60) {
    grade = "及格";
} else {
    grade = "不及格";
}

模组里很常见(比如根据条件选材质、选颜色)。

3.6 运算符优先级

从高到低(记常用的就行):

()         括号最高
++ --      自增自减
* / %      乘除取余
+ -        加减
< > <= >=  比较
== !=      相等
&&         且
||         或
= += ...   赋值最低

不确定就先加括号,代码可读性比炫技重要:

int x = (a + b) * (c - d);   // 清晰

3.7 小练习

  1. 计算 123 % 10、123 / 10,想想怎么用这两个操作取出一个三位数的每一位
  2. 写表达式:判断一个数 n 是不是 3 的倍数且大于 100
  3. 用三元运算符:根据 temperature 是否大于 30 输出"热"或"凉"

本章小结

  • % 取余、/ 整数除法要分清
  • == 比较基本类型;字符串用 .equals()
  • && || 有短路特性
  • 三元运算符简化 if-else
  • 不确定优先级就加括号

下一章:04 流程控制

🏠 返回总站