java中逻辑符号&(|)与&&(||)区别

本文探讨了Java中逻辑运算符“&”、“|”、“&&”及“||”的使用特性,通过具体代码示例说明了这些运算符在条件判断中的行为差异,特别是对空指针异常的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String s = null;

if((s!=null)&(s.length()>0)){}//1

if((s!=null)&&(s.length()>0)){}//2

if((s==null)|(s.length()==0)){}//3

if((s==null)||(s.length()==0)){}//4

java运行情况中,1,3均抛出NullPointerException异常。

知识点:
1. “&”与“|”无论第一个判断条件是否成立,逻辑运算符前后两个条件都会进行判断;
2. “&&”与“||”,前者第一个条件不成立,后面的条件均不进行判断,返回false;后者第一个条件成立,后面的条件均不进行判断,返回true.

### Java中 `&` 和 `&&` 的区别Java中,`&` 和 `&&` 都可以作为逻辑运算符使用,但它们的行为有所不同。以下是两者的具体差异: #### 1. **短路否** - `&&` 是一种具有短路特性的逻辑运算符。这意味着当左侧表达式的值已经能够决定整个布尔表达式的结果时,右侧的表达式将不再被计算。例如,在 `(A && B)` 中,如果 A 为 `false`,B 将不会被执行,因为无论 B 的值如何,最终结果必定为 `false`[^2]。 - `&` 则不具有这种短路特性。它总是会评估两侧的操作数,即使左侧操作数已足以确定整体结果也不例外。比如 `(A & B)` 中,即便 A 已经是 `false`,程序仍然会对 B 进行求值[^2]。 #### 2. **性能考量** 由于 `&&` 存在短路机制,所以在某些情况下可能带来更好的运行效率。因为它可能会跳过不必要的第二部分条件检测过程,从而节省资源消耗。而每次使用单个 `&` 符号都会强制执行两边子句,这可能导致额外开销特别是在右边涉及复杂函数调用的时候[^2]。 #### 3. **适用场景** - 当希望利用短路行为来优化代码者保护潜在错误(如防止空指针访问),应该优先选用双 ampersand (`&&`) 形式。 - 单 ampersand(`&`) 更加适用于需要严格同步处理两个独立事件的情形下——即无论如何都需要确切知道左右两边各自的状态时才考虑采用这种方式[^2]。 另外值得注意的是除了作为逻辑运算外,“&”还可以充当按位操作符作用于整型数据之间完成逐位比较工作;但是“&&”仅限应用于布尔上下文中无法参数值层面交互[^2]。 ```java // Example demonstrating difference between & and && public class LogicalOperatorsExample { public static void main(String[] args) { boolean result; // Using && result = false && checkCondition(); System.out.println("Result with && : " + result); // Using & result = false & checkCondition(); System.out.println("Result with & : " + result); } private static boolean checkCondition(){ System.out.println("checkCondition was called."); return true; } } ``` 在这个例子当中我们可以看到尽管两次赋给变量result初始值均为False,但是在运用不同种类连接词之后产生的实际效果却截然相反:前者根本就不会触发内部方法打印日志消息,后者则一定会显示出来这条信息证明其确实经历了完整的判断流程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值