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

Java中与或非运算符怎么用?

在Java中,使用逻辑运算符: &&表示与(全真为真), ||表示或(一真即真), !表示非(取反布尔值),主要用于条件判断和布尔逻辑运算。

在Java编程中,逻辑运算符与(AND)、或(OR)、非(NOT)是控制程序流程的核心工具,用于组合或反转布尔表达式(true/false),下面通过代码示例和原理分析详细说明其用法。


基础逻辑运算符

逻辑非(NOT)

  • 作用:取反布尔值。
  • 规则!true = false!false = true
    boolean isRaining = true;
    boolean canPlayOutside = !isRaining; // canPlayOutside = false

逻辑与(AND)&&&

  • &(非短路与):两侧表达式都执行,必须同时为true才返回true
    boolean a = (10 > 5) & (3 < 4); // true & true → true
  • &&(短路与):若左侧为false跳过右侧计算(高效)。
    boolean b = (1 > 2) && (10 / 0 == 0); // 左侧false,右侧不执行(避免除零错误)

逻辑或(OR) 和

  • (非短路或):两侧表达式都执行,任意一侧为true即返回true
    boolean c = (5 == 5) | (0 > 1); // true | false → true
  • (短路或):若左侧为true跳过右侧计算
    boolean d = (3 <= 3) || (10 % 0 == 0); // 左侧true,右侧不执行

短路与非短路的区别

运算符 类型 是否短路 典型场景
& 非短路 需强制检查两侧条件(如数据校验)
&& 短路 优先左侧判断(如空指针检查)
非短路 需执行所有操作(如日志记录)
短路 快速失败(如默认值设置)

示例对比

// 短路与(安全)
if (list != null && list.size() > 0) { 
    // 若list为null,跳过size()检查,避免NullPointerException
}
// 非短路或(执行两侧)
boolean isValid = validateInput(input) | logError("Check failed");
// 无论输入是否有效,都会记录日志

关键注意事项

  1. 短路运算符优化性能
    使用&&和可避免不必要的计算(如方法调用、复杂表达式)。

    Java中与或非运算符怎么用?  第1张

  2. 非短路运算符的特殊用途
    当需要强制执行所有表达式时(如修改状态、写入日志),使用&或。

  3. 操作数必须是布尔类型
    Java要求逻辑运算符的操作数为booleantrue/false),不可用整数替代:

    int x = 5;
    // if (x & 1) { ... }  // 编译错误!需改为:(x & 1) != 0
  4. 运算符优先级
    > && > ,建议用明确逻辑:

    boolean result = (a || b) && !c; // 先计算!c,再结合||和&&

综合应用示例

public class AccessControl {
    public static void main(String[] args) {
        boolean isAdmin = true;
        boolean hasPermission = false;
        boolean isSystemActive = true;
        // 组合逻辑:管理员或拥有权限,且系统必须活跃
        boolean grantAccess = (isAdmin || hasPermission) && isSystemActive;
        System.out.println("Access granted: " + grantAccess); // true
        // 使用非短路或确保日志记录
        boolean isDataValid = checkData() | log("Data checked");
    }
}

运算符 符号 适用场景
逻辑非 条件取反
短路与 && 高效检查(优先左侧)
非短路与 & 强制两侧执行
短路或 快速匹配(左侧为true即跳过)
非短路或 确保所有操作执行

提示

  • 日常开发中优先使用&&(安全高效)。
  • 位运算符(&、)在整数运算中含义不同,需区分上下文。

基于Java语言规范及开发实践总结,参考Oracle官方文档Java Operators。

0