运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等操作。

运算符分为下面六类:

  • 算数运算符
  • 赋值运算符
  • 关系运算符(比较运算符)
  • 逻辑运算符
  • 位运算符(需要二进制知识基础)
  • 三元运算符

算数运算符

算数运算符是对数值类型的变量进行运算的,在 Java 程序中使用的非常多
image.png

这里举几个比较反直觉的例子:

  1. public class Main {
  2. public static void main(String[] args) {
  3. // 10 和 4 都是 int ,表达式的结果也是 int ,所以就等价于整除。而不是数学上的 2.5
  4. System.out.println(10 / 4); // 2
  5. // 10.0 是 double 类型,表达式的结果会自动提升为 double ,所以结果是 2.5
  6. System.out.println(10.0 / 4); // 2.5
  7. // % 取模 / 取余
  8. // % 的本质,看下公式: a % b = a - a / b * b
  9. // -10 % 3 = -10 - (-10) / 3 * 3 = -1
  10. // 10 % -3 = 10 - 10 / -3 * -3 = 1
  11. // -10 % -3 = -10 - (-10) / -3 * -3 = -1
  12. System.out.println(-10 % 3); // -1
  13. System.out.println(10 % -3); // 1
  14. System.out.println(-10 % -3); // -1
  15. }
  16. }

关系运算符

关系运算符的结果都是 boolean 类型,要么是 true ,要么是 false 。常用于 if / switch / for / while 作为判断条件。
image.png

逻辑运算符 / 位运算符

1)短路与 && ,短路或 || ,取反 !
2)逻辑与 & ,逻辑或 | ,逻辑异或^
image.png

& 和 && 的区别

  1. public class Main {
  2. public static void main(String[] args) {
  3. int a = 5;
  4. int b = 10;
  5. // &&:如果第一个条件为 false ,后面的条件不再判断
  6. if (a > 5 && ++b <= 10) {
  7. System.out.println("条件为真");
  8. }
  9. System.out.println(a); // 5
  10. System.out.println(b); // 10
  11. // &:如果第一个条件为 false ,后面的条件仍然会判断
  12. if (a > 5 & ++b <= 10) {
  13. System.out.println("条件为真");
  14. }
  15. System.out.println(a); // 5
  16. System.out.println(b); // 11
  17. }
  18. }

| 和 || 的区别

  1. public class Main {
  2. public static void main(String[] args) {
  3. int a = 5;
  4. int b = 10;
  5. // ||:如果第一个条件为 true ,后面的条件不再判断
  6. if (a >= 5 || ++b <= 10) {
  7. System.out.println("true");
  8. }
  9. System.out.println(a); // 5
  10. System.out.println(b); // 10
  11. // |:如果第一个条件为 true ,后面的条件仍然会判断
  12. if (a >= 5 & ++b <= 10) {
  13. System.out.println("true");
  14. }
  15. System.out.println(a); // 5
  16. System.out.println(b); // 11
  17. }
  18. }

赋值运算符

赋值运算符就是将某个值(可以是字面量,也可以是表达式,也可以是变量),赋给指定的变量。

赋值运算符分以下两种:

  • 基本赋值运算符:=
  • 复合赋值运算符:+=、-=、*=、/=、%=

三元运算符

表达式 1 和表达式 2 要为可以赋给接收变量的类型(或可以自动类型转换)。

三元运算符可以转换成 if - else 语句。

  1. public class Main {
  2. public static void main(String[] args) {
  3. int a = 10;
  4. int b = 11;
  5. int res = a > b ? a++ : b--;
  6. System.out.println(res); // 11
  7. System.out.println(a); //10
  8. System.out.println(b); // 10
  9. }
  10. }

运算符优先级

运算符有不同优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优于下一行。
只有单目运算符、赋值运算符是从右向左运算的。
image.png