<
Java 中的运算符
>
上一篇

Java 关键字
下一篇

Java 对象和类
各类运算符介绍以及优先级问题
苏轻最后编辑于2018年12月2日15:17:34

算术运算符

    int a = 1;   // a=1
    int b = a++; // 先赋值,在自增 b=a=1 a=a+1=2
    int c = ++a; // 先自增,在赋值 a=a+1=3 c=a=3
    int d = -7 % 3; // d=-1
    int e = 7 % -3; // e=1

赋值运算符

  int a = 1;
  int b = 2;
  a += b; // a=a+b=3
  a *= b; // a=a*b=6

关系运算符

逻辑运算符

名称 符号 结果
逻辑与 & 如果两个操作数都是true,那么结果为true,否则为false
逻辑或 | 两个操作数只要有一个是true,结果就为true,否则为false
短路与 && 只要有一个为false,就直接返回false结束运算
短路或 || 只要有一个为true,就直接返回true结束运算
逻辑非 ! 取反
逻辑异或 ^ 相同为false,不同为true
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.printf("a = %d, b = %d\n", a, b);

        boolean f = (a == b) && (++a == b);
        // 因为 a == b 为 false,所以 f = false,短路后右边不计算
        System.out.printf("f = %b\n", f);
        System.out.printf("a = %d, b = %d\n", a, b);

        boolean t = (++a == b) && (a == b);
        // 因为 ++a 先计算,所以 a = 2
        // 发生短路的时候,不会再计算右边部分,某些计算导致的值的改变就不会发生
        System.out.printf("t = %b\n", t);
        System.out.printf("a = %d, b = %d\n", a, b);
    }

位运算符

位运算符 说明
~ 取反
& 按位与
| 按位或
^ 按位异或
« 左移运算符,二进制左移相当于乘2
» 右移运算符,二进制右移一位以为相当于除2取商

字符串连接符(+)

条件运算符

运算符的优先级问题

优先级 运算符 结合性
1 () 括号运算符 由左至右
2 !、+(正)、-(负) 一元运算符 由左至右
2 ~ 位逻辑运算符 由右至左
2 ++、– 递增与递减运算符 由右至左
3 *、/、% 算术运算符 由左至右
4 +、- 算术运算符 由左至右
5 «、» 位左移、右移运算符 由左至右
6 >、>=、<、<= 关系运算符 由左至右
7 ==、!= 关系运算符 由左至右
8 & 位运算符、逻辑运算符 由左至右
9 ^ 位运算符、逻辑运算符 由左至右
10 | 位运算符、逻辑运算符 由左至右
11 && 逻辑运算符 由左至右
12 || 逻辑运算符 由左至右
13 ? : 条件运算符 由右至左
14 =、+=、-=、*=、/=、%= 赋值运算符、扩展运算符 由右至左

  我现在要举一个例子:A || B && C,看第一眼的时候谁能很清晰地反应过来优先级?它等价于A || (B && C),而不是(A || B) && C

  脑容量不够用的苏轻觉得根本没必要记这么多优先级!既然小括号是最高的优先级,那写表达式的时候就全部用小括号括起来吧!

instanceof 运算符

Top
Foot