上一篇
java中 与 或 非 怎么写
- 后端开发
- 2025-07-28
- 3847
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:
- 使用
&&可以利用其短路特性,提高代码效率和安全性,在条件判断中,如果左边的表达式已经决定了最终结果,右边的表达式不会被执行,这可以避免不必要的计算或潜在的异常。
