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 小练习¶
- 计算
123 % 10、123 / 10,想想怎么用这两个操作取出一个三位数的每一位 - 写表达式:判断一个数
n是不是 3 的倍数且大于 100 - 用三元运算符:根据
temperature是否大于 30 输出"热"或"凉"
本章小结¶
%取余、/整数除法要分清==比较基本类型;字符串用.equals()&&||有短路特性- 三元运算符简化 if-else
- 不确定优先级就加括号
下一章:04 流程控制