杰瑞科技汇

Java boolean 运算有哪些优先级规则?

布尔类型

Java 中表示“真”或“假”的类型是 boolean,它只有两个值:

Java boolean 运算有哪些优先级规则?-图1
(图片来源网络,侵删)
  • true:表示“真”。
  • false:表示“假”。
boolean isJavaFun = true;
boolean isFishTasty = false;
System.out.println(isJavaFun); // 输出: true
System.out.println(isFishTasty); // 输出: false

关系运算符

关系运算符用于比较两个值,其结果总是 boolean 类型的 truefalse,它们是构成布尔表达式的基石。

运算符 名称 示例 结果
等于 5 == 5 true
不等于 5 != 5 false
> 大于 10 > 5 true
< 小于 10 < 5 false
>= 大于或等于 10 >= 10 true
<= 小于或等于 5 <= 10 true

⚠️ 重要提示: 与 equals() 的区别

  • 对于基本数据类型(如 int, double, boolean), 比较的是是否相等。
  • 对于对象引用类型(如 String, Integer), 比较的是两个引用是否指向同一个内存地址(即是否是同一个对象)。
  • equals():通常用于比较对象的内容(值)是否相等,对于 String 类,equals() 方法被重写用来比较字符串内容。
int a = 10;
int b = 10;
System.out.println(a == b); // true, 值相等
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false, s1和s2是两个不同的对象实例
System.out.println(s1.equals(s2)); // true, s1和s2的内容相同

逻辑运算符

逻辑运算符专门用于操作 boolean 类型的值,常用于组合多个条件。

1 逻辑与 (&& - Logical AND)

  • 规则:仅当两个操作数都为 true 时,结果才为 true,否则为 false
  • 真值表: | A | B | A && B | |---|---|---| | true | true | true | | true | false | false | | false | true | false | | false | false | false |
int age = 25;
boolean hasLicense = true;
boolean canDrive = (age >= 18) && hasLicense; // true && true = true
System.out.println(canDrive); // 输出: true

2 逻辑或 ( - Logical OR)

  • 规则:只要两个操作数中至少有一个为 true,结果就为 true,仅当两个都为 false 时,结果才为 false
  • 真值表: | A | B | A || B | |---|---|---| | true | true | true | | true | false | true | | false | true | true | | false | false | false |
boolean isWeekend = true;
boolean isHoliday = false;
boolean noWork = isWeekend || isHoliday; // true || false = true
System.out.println(noWork); // 输出: true

3 逻辑非 ( - Logical NOT)

  • 规则:对操作数的布尔值进行取反。truefalsefalsetrue
  • 真值表: | A | !A | |---|---| | true | false | | false | true |
boolean isRaining = false;
boolean isNotRaining = !isRaining; // !false = true
System.out.println(isNotRaining); // 输出: true

短路求值

Java 的逻辑与 (&&) 和逻辑或 () 具有短路求值的特性,这是一个非常重要的性能优化点。

Java boolean 运算有哪些优先级规则?-图2
(图片来源网络,侵删)
  • 对于 && (AND)

    • 如果左边的表达式为 false,整个表达式的结果必定是 false,因此不会再计算右边的表达式
    • 示例
      int x = 5;
      boolean result = (x > 10) && (10 / x > 1); // x > 10 为 false
      // 程序不会执行 10 / x,避免了除以零的风险
      System.out.println(result); // 输出: false
  • 对于 (OR)

    • 如果左边的表达式为 true,整个表达式的结果必定是 true,因此不会再计算右边的表达式
    • 示例
      int x = 5;
      boolean result = (x < 10) || (10 / x > 1); // x < 10 为 true
      // 程序不会执行 10 / x,避免了除以零的风险
      System.out.println(result); // 输出: true

注意:逻辑非 () 和位运算符 &没有短路求值行为,它们总是会计算所有操作数。


位运算符 (适用于布尔值)

虽然位运算符是为整数设计的,但它们也可以对 boolean 值进行运算,在 Java 中,true 被视为 1false 被视为 0

Java boolean 运算有哪些优先级规则?-图3
(图片来源网络,侵删)
  • 按位与 (& - Bitwise AND)

    • 与逻辑与 && 类似,但不会短路
    • true & true -> 1 & 1 -> 1 -> true
    • true & false -> 1 & 0 -> 0 -> false
  • 按位或 ( - Bitwise OR)

    • 与逻辑或 类似,但不会短路
    • true | false -> 1 | 0 -> 1 -> true
    • false | false -> 0 | 0 -> 0 -> false
  • 按位异或 (^ - Bitwise XOR)

    • 规则:当两个操作数不相同时,结果为 true;相同时,结果为 false
    • true ^ true -> 1 ^ 1 -> 0 -> false
    • true ^ false -> 1 ^ 0 -> 1 -> true

使用建议:在绝大多数情况下,你应该使用逻辑运算符 &&、 和 ,因为它们更符合逻辑语义,并且有短路求值的优化优势,仅在需要无条件执行所有表达式或进行特定算法时才考虑使用位运算符 &、、^


常见应用场景

布尔运算的核心应用是在控制流语句中。

1 if-else 语句

int score = 85;
if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 60 && score < 90) { // 组合条件
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

2 whilefor 循环

// 只要 isFinished 为 false,循环就继续
boolean isFinished = false;
int count = 0;
while (!isFinished) { // !false -> true
    count++;
    if (count >= 10) {
        isFinished = true;
    }
}

3 三元运算符

int age = 20;
String status = (age >= 18) ? "成年人" : "未成年人";
// (age >= 18) 是 true,status 的值为 "成年人"
System.out.println(status);

运算符 名称 类型 短路求值 主要用途
等于 关系 比较值是否相等
不等于 关系 比较值是否不相等
> 大于 关系 比较大小
< 小于 关系 比较大小
>= 大于等于 关系 比较大小
<= 小于等于 关系 比较大小
&& 逻辑与 逻辑 组合多个条件,全部为真才为真
\|\| 逻辑或 逻辑 组合多个条件,一个为真即为真
逻辑非 逻辑 对布尔值取反
& 按位与 位运算 一般不用于布尔逻辑,除非特殊需求
按位或 位运算 一般不用于布尔逻辑,除非特殊需求
^ 按位异或 位运算 判断两个布尔值是否不同

掌握这些布尔运算符是编写任何逻辑复杂程序的基础,理解它们的区别,特别是短路求值的特性,能帮助你写出更高效、更健壮的代码。

分享:
扫描分享到社交APP
上一篇
下一篇