电话
400 9058 355
Java中&&和||叫“短路”运算符,因为它们在确定结果后立即停止计算右表达式,可避免空指针等错误;&和|是不短路的位运算符,布尔上下文中仍会执行两边;混用==和equals()易导致逻辑错误或NPE;复杂条件务必加括号或拆解为语义变量。
&&和||为什么叫“短路”运算符因为它们在确定整体结果后,**立刻停止计算右边表达式**。比如 a && b 中,若 a 为 false,整个结果必为 false,b 根本不会执行;同理,a || b 中若 a 为 true,b 就被跳过。
这不只是性能优化,更是避免副作用或运行时错误的关键:
obj != null && obj.toString().length() > 0 —— 若 obj 为 null,obj.toString() 不会调用list != null && !list.isEmpty() && list.get(0) > 5 —— 前两个条件不满足时,get(0) 不会触发flag = true || doSomething() 中,doSomething() 永远不会执行&和|在布尔上下文中到底有什么用它们是**位运算符**,但在 boolean 类型上也合法,且**不短路**:左右两边一定都会求值。日常逻辑判断中几乎不用,但有特定场景:
示例:boolean a = false; boolean b = true; boolean result = a | b; → b 仍会被计算,即使 a 是 false。注意:这里用 | 而非

||,语义完全不同。
==和equals()容易出什么错这不是逻辑运算符本身的问题,但常出现在 &&/|| 的左右操作数中,导致逻辑失效:
String s1 = "hello"; String s2 = new String("hello"); if (s1 == s2 && ...) → false,整条逻辑可能意外跳过Integer a = 128, b = 128; if (a == b && ...) → 在 -128~127 外缓存失效,== 返回 false,而 equals() 才正确Boolean flag = null; if (flag == true && ...) → 抛 NullPointerException;应写成 Boolean.TRUE.equals(flag) 或先判空Java 中 ! 优先级最高,接着是 &&,最低是 ||。但人脑记不住优先级,尤其混合使用时:
a || b && c 等价于 a || (b && c),不是 (a || b) && c
!a && b || c 等价于 ((!a) && b) || c,但可读性极差boolean 变量,例如 isValidUser、hasPermission,再组合真正难的不是语法,是把业务规则准确映射到布尔结构里;多一层括号,少三天 debug。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...