上一篇
java中 与 或 非 怎么写
- 后端开发
- 2025-07-28
- 4
Java中,逻辑与用
&&
,逻辑或用
||
,逻辑非用
!
。
Java编程中,逻辑运算符用于组合和操作布尔值(即 true
和 false
),主要的逻辑运算符包括与(AND)、或(OR)和非(NOT),这些运算符在控制程序流程、条件判断等方面起着至关重要的作用,下面将详细介绍Java中与、或、非的写法及其使用方法。
与(AND)运算符
符号与用法
- 符号:
&&
(短路与)、&
(按位与) - 功能:当使用
&&
时,如果第一个布尔表达式为false
,则整个表达式结果为false
,且第二个表达式不会被评估(短路),而&
则会评估两个表达式。
示例代码
表达式 | 描述 | 结果 |
---|---|---|
true && true |
两个条件都为真 | true |
true && false |
一个条件为假 | false |
false && true |
一个条件为假 | false |
false && false |
两个条件都为假 | false |
public class AndOperatorExample { public static void main(String[] args) { boolean a = true; boolean b = false; // 使用 && 运算符 boolean result1 = a && b; // false System.out.println("a && b = " + result1); // 使用 & 运算符 boolean result2 = a & b; // false System.out.println("a & b = " + result2); // 短路特性示例 boolean c = false; boolean result3 = c && performTask(); // performTask() 不会被调用 System.out.println("c && performTask() = " + result3); // 非短路特性示例 boolean result4 = c & performTask(); // performTask() 会被调用 System.out.println("c & performTask() = " + result4); } public static boolean performTask() { System.out.println("performTask() 被调用"); return true; } }
输出:
a && b = false
a & b = false
c && performTask() = false
performTask() 被调用
c & performTask() = false
说明
&&
是短路与运算符,当第一个条件为false
时,第二个条件不会被评估,这在某些情况下可以提高效率或避免不必要的计算。&
是按位与运算符,也会对布尔值进行与操作,但不具备短路特性,无论第一个条件是否为false
,第二个条件都会被评估。
或(OR)运算符
符号与用法
- 符号:(短路或)、(按位或)
- 功能:当使用 时,如果第一个布尔表达式为
true
,则整个表达式结果为true
,且第二个表达式不会被评估(短路),而 则会评估两个表达式。
示例代码
表达式 | 描述 | 结果 |
---|---|---|
true || true |
任一条件为真 | true |
true || false |
一个条件为真 | true |
false || true |
一个条件为真 | true |
false || false |
两个条件都为假 | false |
public class OrOperatorExample { public static void main(String[] args) { boolean a = true; boolean b = false; // 使用 || 运算符 boolean result1 = a || b; // true System.out.println("a || b = " + result1); // 使用 | 运算符 boolean result2 = a | b; // true System.out.println("a | b = " + result2); // 短路特性示例 boolean c = true; boolean result3 = c || performTask(); // performTask() 不会被调用 System.out.println("c || performTask() = " + result3); // 非短路特性示例 boolean result4 = c | performTask(); // performTask() 会被调用 System.out.println("c | performTask() = " + result4); } public static boolean performTask() { System.out.println("performTask() 被调用"); return false; } }
输出:
a || b = true
a | b = true
c || performTask() = true
c | performTask() = true
performTask() 被调用
说明
- 是短路或运算符,当第一个条件为
true
时,第二个条件不会被评估,这在某些情况下可以提高效率或避免不必要的计算。 - 是按位或运算符,也会对布尔值进行或操作,但不具备短路特性,无论第一个条件是否为
true
,第二个条件都会被评估。
非(NOT)运算符
符号与用法
- 符号:
- 功能:用于取反布尔值,即将
true
变为false
,将false
变为true
。
示例代码
表达式 | 描述 | 结果 |
---|---|---|
!true |
取反真 | false |
!false |
取反假 | true |
public class NotOperatorExample { public static void main(String[] args) { boolean a = true; boolean b = false; // 使用 ! 运算符 boolean result1 = !a; // false System.out.println("!a = " + result1); boolean result2 = !b; // true System.out.println("!b = " + result2); // 结合其他运算符使用 boolean result3 = !(a && b); // !(true && false) = !false = true System.out.println("!(a && b) = " + result3); boolean result4 = (!a) || b; // false || false = false System.out.println("(!a) || b = " + result4); } }
输出:
!a = false
!b = true
!(a && b) = true
(!a) || b = false
说明
- 运算符用于反转布尔值,常用于条件判断中需要取反的情况。
- 在复杂表达式中,非运算符的优先级较高,通常需要使用括号来明确运算顺序。
综合示例
下面通过一个综合示例展示如何在条件判断中使用与、或、非运算符。
public class LogicalOperatorsComprehensive { public static void main(String[] args) { int score = 85; boolean isWeekend = true; boolean isHoliday = false; // 判断是否可以获得奖励 boolean canGetReward = (score >= 90) || (isHoliday && score >= 80); System.out.println("可以获得奖励: " + canGetReward); // false || (false && true) = false || false = false // 判断是否需要加班 boolean needsOvertime = !isWeekend && score < 90; System.out.println("需要加班: " + needsOvertime); // false && true = false // 判断是否可以休息 boolean canRest = isWeekend || isHoliday; System.out.println("可以休息: " + canRest); // true || false = true // 复杂条件判断 boolean hasPermission = isHoliday || (score >= 80 && !isWeekend); System.out.println("有权限: " + hasPermission); // false || (true && false) = false || false = false } }
输出:
可以获得奖励: false
需要加班: false
可以休息: true
有权限: false
说明
- 在实际应用中,逻辑运算符常常结合使用,以构建复杂的条件判断。
- 使用括号可以明确运算顺序,避免逻辑错误,在
canGetReward
中,先计算括号内的isHoliday && score >= 80
,然后再与score >= 90
进行或运算。
注意事项
-
短路特性:
&&
和 具有短路特性,即当左边的表达式已经能决定最终结果时,右边的表达式不会被评估,这在某些情况下可以提高性能或避免潜在的错误(如避免调用可能抛出异常的方法)。 -
优先级:逻辑运算符的优先级从高到低依次为 、
&&
、,在复杂表达式中,建议使用括号来明确运算顺序,增加代码的可读性。 -
与按位运算符的区别:
&&
和 是逻辑运算符,专门用于布尔值的逻辑运算;而&
和 是按位运算符,用于整数类型的位运算,虽然它们在布尔值上也可以工作,但行为有所不同,尤其是短路特性。
FAQs
Q1: &&
和 &
有什么区别?
A1:
&&
是逻辑与运算符,具有短路特性,当左边的表达式为false
时,整个表达式结果为false
,且右边的表达式不会被评估,适用于布尔逻辑判断。&
是按位与运算符,也可以用于布尔值的逻辑与操作,但不具备短路特性,无论左边表达式的结果如何,右边的表达式都会被评估。&
还可以用于整数的按位与操作。
Q2: 为什么有时候使用 &&
而不是 &
?
A2:
- 使用
&&
可以利用其短路特性,提高代码效率和安全性,在条件判断中,如果左边的表达式已经决定了最终结果,右边的表达式不会被执行,这可以避免不必要的计算或潜在的异常。