一、 “!” 的优先级
逻辑“非”运算符 “!”的优先级最高,其作用是对一个布尔值取反。例如:
boolean a = true; boolean b = !a; // b = false
可以发现, “!” 取反操作是在 b 赋值之前完成的。因此在使用逻辑运算符时,应注意“!”的优先级,正确地使用括号,以避免产生意想不到的错误。
二、 “&&” 的优先级
逻辑“与”运算符 “&&” 的优先级高于逻辑“或”运算符 “||”。例如:
boolean a = true, b = false, c = true; if (a && b || c) { // 相当于 if ((a && b) || c) System.out.println("a && b || c"); } else { System.out.println("!a && !b && !c"); }
上述代码中,“a && b” 会将结果作为一个整体,与 “c” 进行逻辑“或”操作,即先执行 “&&” 后执行 “||”。
三、 “||” 的优先级
逻辑“或”运算符 “||” 的优先级低于关系运算符(如大于、小于等)和算术运算符(如加、减等)。例如:
int a = 3, b = 4, c = 5; if (a > b || a + b > c) { System.out.println("a > b || a + b > c"); } else { System.out.println("!(a > b || a + b > c)"); }
上述代码中,先进行算术运算,然后再与 “||” 操作一起进行。
四、位运算符与逻辑运算符
需要注意的是,位运算符与逻辑运算符混用时,位运算符的优先级更高。例如:
int a = 3, b = 5; if ((a & 1) == 1 || (b & 1) == 1) { System.out.println("奇数"); } else { System.out.println("偶数"); }
在该代码中,如果没有使用括号,会先执行位运算 “&” 操作,而不是逻辑运算 “||” 操作。
五、三目运算符与逻辑运算符
三目运算符“?:”的优先级是比逻辑运算符低的。例如:
boolean a = true, b = false; int c = a ? 1 : (b ? 2 : 3); // c = 1
可以发现,在三目运算符中,先判断 a 是否成立,如果成立则返回 1,否则再判断 b 是否成立,如果成立则返回 2,否则返回 3。这里优先级更低的是三目运算符,而非逻辑运算符。