运算符 优先级 详解-2. 优先级详解及示例

时间:2024-11-24 21:23:23

2.1 圆括号 ()

  • 优先级最高,可以强制改变默认的计算顺序。
  • 常用于明确运算顺序,增强代码可读性。
示例:
int a = 10, b = 5, c = 2;
System.out.println(a + b * c); // 输出:20 (先乘法,再加法)
System.out.println((a + b) * c); // 输出:30 (先加法,再乘法)

2.2 自增和自减

  • 后置 ++/--:先使用当前值,再自增/自减。
  • 前置 ++/--:先自增/自减,再使用新值。
示例:
int a = 5;
System.out.println(a++); // 输出:5,a 变为 6
System.out.println(++a); // 输出:7,a 已变为 7

2.3 一元运算符

  • 包括前置 ++/--、正负号(+/-)、按位取反(~)、逻辑取反(!)。
  • 从右到左结合。
示例:
int a = 5;
System.out.println(-a);  // 输出:-5
System.out.println(!true); // 输出:false
System.out.println(~a); // 输出:-6(二进制取反)

2.4 算术运算符

  • 乘法、除法、取模* / %)的优先级高于加法、减法(+ -)。
  • 从左到右结合。
示例:
int a = 10, b = 3, c = 2;
System.out.println(a + b * c); // 输出:16
System.out.println(a % b + c); // 输出:3 (先取模,再加法)

2.5 位移运算符

  • 优先级低于算术运算符,从左到右结合。
  • 包括左移 <<,有符号右移 >>,无符号右移 >>>
示例:
int a = 8; // 二进制:1000
System.out.println(a >> 1); // 输出:4(二进制:0100)
System.out.println(a << 2); // 输出:32(二进制:100000)

2.6 比较运算符

  • 优先级低于位移运算符
  • 包括 < <= > >=instanceof
示例:
int a = 5, b = 10;
System.out.println(a < b); // 输出:true
System.out.println(a instanceof Integer); // 检查类型(示例中无意义)

2.7 相等运算符

  • 优先级低于比较运算符
  • 包括 ==!=
示例:
int a = 5, b = 5;
System.out.println(a == b); // 输出:true
System.out.println(a != b); // 输出:false

2.8 按位运算符

  • 按位与(&)、按位异或(^)、按位或(|)。
  • 优先级低于相等运算符
示例:
int a = 5, b = 3; // a = 0101, b = 0011
System.out.println(a & b); // 输出:1(二进制:0001)
System.out.println(a | b); // 输出:7(二进制:0111)
System.out.println(a ^ b); // 输出:6(二进制:0110)

2.9 逻辑运算符

  • 包括逻辑与(&&)和逻辑或(||)。
  • 短路求值:遇到结果已确定时停止计算。
示例:
int a = 5, b = 0;
System.out.println((b != 0) && (a / b > 1)); // 不会计算 a / b,避免异常

2.10 三元运算符

  • 格式:condition ? value1 : value2
  • 优先级低于逻辑运算符,从右到左结合。
示例:
int a = 5, b = 10;
System.out.println(a > b ? "a 大" : "b 大"); // 输出:b 大

2.11 赋值运算符

  • 包括 = += -= *= /= 等复合运算符。
  • 优先级最低(仅高于逗号运算符),从右到左结合。
示例:
int a = 5;
a += 10; // 等价于 a = a + 10
System.out.println(a); // 输出:15

2.12 逗号运算符

  • 用于在一个表达式中顺序计算多个子表达式,结果为最后一个子表达式的值。
示例:
int a = (1, 2, 3); // 最后一个值 3 赋给 a
System.out.println(a); // 输出:3