当前位置:首页 > 后端开发 > 正文

java中 与 或 非 怎么写

Java中,逻辑与用 &&,逻辑或用 ||,逻辑非用 !

Java编程中,逻辑运算符用于组合和操作布尔值(即 truefalse),主要的逻辑运算符包括与(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);
    }
}

输出:

java中 与 或 非 怎么写  第1张

!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:

  • 使用 && 可以利用其短路特性,提高代码效率和安全性,在条件判断中,如果左边的表达式已经决定了最终结果,右边的表达式不会被执行,这可以避免不必要的计算或潜在的异常。
0