java逻辑&、双与&&的区别

本文详细解析了Java中的逻辑运算符&、&&、| 和 || 的使用方法及特点,特别是&& 和 || 的短路特性,并通过示例代码展示了这些运算符的具体应用。

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

add:

  • 逻辑与:&—— 有false则false
  • 逻辑或:| —— 有true则true
/*
    测试逻辑&、双与&&的区别:
        A:最终结果一样
        B:&&具有短路效果。当左边是flase时,右边不再执行。
           (同理双或||。左边是true时,右边不执行。)

        开发中常用的逻辑运算符:
            &&、||、!(效率比单的高)
*/

class OperateLuojiyu{
    public static void main(String[] args){
        int x=7, y=8;
        //boolean b=((x++ == 7) & (y++ == 8));       //8 9 true
        //boolean b=((x++ == 7) && (y++ == 8));      //8 9 true
        //boolean b=((++x == 7) & (y++ == 8));           //8 9 flase
        boolean b=((++x == 7) && (y++ == 8));            //8 8 flase  Note:后面的y为8! &&前执行完为flase,之后直接就不执行了,得出flase

        System.out.println("x:"+x+" y:"+y+"  "+b);

    }

}
### 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、付费专栏及课程。

余额充值