Java 的运算符分这几类:算术、关系、逻辑、位、赋值、三元。下面逐个看,每个都带可运行的例子。
1. 算术运算符
+ - * / %(加、减、乘、除、取余)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class ArithmeticDemo { public static void main(String[] args) { int a = 10; int b = 3;
System.out.println(a + b); System.out.println(a - b); System.out.println(a * b); System.out.println(a / b); System.out.println(a % b);
System.out.println(a / (double) b); } }
|
注意:两个整数相除,小数部分会被直接截断(不是四舍五入)。
2. 自增自减
++ 自增、-- 自减。分前缀和后缀,区别是先加还是先用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class IncrementDemo { public static void main(String[] args) { int i = 5;
int x = i++; System.out.println("x = " + x); System.out.println("i = " + i);
int y = ++i; System.out.println("y = " + y); System.out.println("i = " + i);
int z = i--; System.out.println("z = " + z + ", i = " + i); } }
|
口诀:符号在前,先加后用;符号在后,先用后加。
3. 关系运算符
> < >= <= == !=,结果是 boolean。
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class RelationalDemo { public static void main(String[] args) { int a = 10; int b = 20;
System.out.println(a > b); System.out.println(a < b); System.out.println(a >= b); System.out.println(a <= b); System.out.println(a == b); System.out.println(a != b); } }
|
4. 逻辑运算符
&& 与、|| 或、! 非。它们都有短路特性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class LogicDemo { public static void main(String[] args) { boolean t = true; boolean f = false;
System.out.println(t && f); System.out.println(t || f); System.out.println(!t);
int a = 0; boolean result = (a != 0) && (10 / a > 1); System.out.println(result);
boolean result2 = (a == 0) || (10 / a > 1); System.out.println(result2); } }
|
&& 和 || 会短路;单个 & 和 | 不会短路(属于位运算,见下)。
5. 位运算符
& | ^ ~ << >>,直接操作二进制位,初学了解即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class BitDemo { public static void main(String[] args) { int a = 5; int b = 3;
System.out.println(a & b); System.out.println(a | b); System.out.println(a ^ b); System.out.println(~a);
System.out.println(a << 1); System.out.println(a >> 1); } }
|
6. 赋值与复合赋值
= 赋值,+= -= *= /= %= 复合赋值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class AssignDemo { public static void main(String[] args) { int a = 10; a += 5; System.out.println(a);
a -= 3; System.out.println(a);
a *= 2; System.out.println(a);
a /= 4; System.out.println(a);
a %= 4; System.out.println(a); } }
|
7. 三元运算符
条件 ? 值1 : 值2,条件为 true 取 值1,否则取 值2。
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class TernaryDemo { public static void main(String[] args) { int score = 85; String level = score >= 60 ? "及格" : "不及格"; System.out.println(level);
int a = 10; int b = 20; int max = a > b ? a : b; System.out.println(max); } }
|
8. 运算符优先级
优先级从高到低大致是:() → 一元(++ -- ! ~)→ 算术(* / % 高于 + -)→ 关系 → 逻辑(&& 高于 ||)→ 三元 → 赋值。
1 2 3 4 5 6 7 8 9
| public class PrecedenceDemo { public static void main(String[] args) { int a = 2 + 3 * 4; System.out.println(a);
int b = (2 + 3) * 4; System.out.println(b); } }
|
记不住优先级没关系,加括号就行——括号永远最清楚,别人也更好读。
小结
- 整数相除会截断小数,要小数就转
double
++i 先加后用,i++ 先用后加
&& || 有短路特性,能避免不必要的计算(甚至除零错误)
- 优先级拿不准就加括号