Java运算符:2种短路逻辑运算符

短路逻辑运算符用于处理布尔类型的值,即真(true)和假(false)。

Java提供了2种短路逻辑运算符

  • 与(&&)
  • 或(||)

它们在控制流程、条件判断以及逻辑表达式中发挥着核心作用。本文将逐一介绍这些逻辑运算符,并通过典型例子展示其应用场景。

1. 短路与(&&)

与运算符(&&)用于连接两个布尔表达式,只有当两边的表达式都为真时,结果才为真。

 // 短路与
 System.out.println("true && true 的结果:" + (true && true));
 System.out.println("true && false 的结果:" + (true && false));
 System.out.println("false && true 的结果:" + (false && true));
 System.out.println("false && false 的结果:" + (false && false));

在这里插入图片描述

逻辑与运算符两边的表达式可以是boolean类型的变量:

boolean isValidUsername = true;
boolean isValidPassword = false;

System.out.println("isValidUsername && isValidPassword 的结果:" + (isValidUsername && isValidPassword));

也可以是结果为boolean类型的表达式:

boolean isAllValid = (7 > 3) && (4 < 5);
或者
boolean isAllValid = compare(7,3) && compare(5,4);
public boolean compare(int num1, int num2) {
  return num1 > num2;
}

逻辑与遵循短路原则,即如果左边的表达式为假,则不会继续评估右边的表达式,因为无论右边结果如何,整体结果都已经确定为假。

public static void main(String[] args) {
        // 演示短路与,&&运算符两边是函数调用
        System.out.println("短路与演示:isGreat1 && isGreat2 :" + (isGreate(3,7) && isGreate(7,3)) );
}

private static boolean isGreate(int num1, int num2) {
        System.out.println(String.format("判断num1:【%d】 是否大于【num2】:%d", num1, num2));
        return num1 > num2;
 }

在这里插入图片描述
如上所示,逻辑与运算符左边的表达式返回结果为false,则右边的表达式不会被执行,因为此时已经可以判断逻辑与运算结果为false,无需继续计算右边表达式的结果。

交换上面代码逻辑与运算符左右两边的表达式,使得短路与运算符左边的表达式结果为ture。如下图,虽然最终整个表达式结果仍然是false,但是左右两边的表达式都有执行:

在这里插入图片描述

场景示例

考虑用户登录验证的场景,我们需要检查用户名和密码是否同时有效:

在这里插入图片描述

boolean isValidUsername = checkUsername(username);
boolean isValidPassword = checkPassword(password);

if (isValidUsername && isValidPassword) {
    System.out.println("登录成功!");
} else {
    System.out.println("用户名或密码错误。");
}

在这个例子中,&&运算符确保了只有当isValidUsernameisValidPassword均为true时,才会输出“登录成功!”的消息,否则直接提示错误信息,避免了不必要的密码验证。

2. 短路或(||)

或运算符(||)用于连接两个布尔表达式,只要两边的表达式中有一个为真,结果就为真。

// 短路或
System.out.println("true || true 的结果:" + (true || true));
System.out.println("true || false 的结果:" + (true || false));
System.out.println("false || true 的结果:" + (false || true));
System.out.println("false || false 的结果:" + (false || false));

在这里插入图片描述

同样遵循短路原则,若左边表达式为真,则不会继续评估右边表达式。

在这里插入图片描述

因为短路与运算符左侧的表达式结果为true,整个表达式的结果肯定为true,无需继续判断右侧表达式的结果,所以上图中只有一次函数调用的日志。

如果逻辑与运算符左边表达式的结果为false呢?

如下图所示,这种情况下,就不会出现短路现象,两边的表达式都会执行。

在这里插入图片描述

场景示例

在这里插入图片描述

去女朋友家见丈母娘,丈母娘说:“必须有车或者房子,否则趁早分手”:

boolean hasCar= boyFriend.hasCar();
boolean hasHouse= boyFriend.hasHouse();

if (hasCar|| hasHouse) {
    System.out.println("叫妈吧,好女婿。");
} else {
    System.out.println("没门,你以为你是郭有才啊。");
}

此例中,只要男朋友有车(hasCar)或者有房(hasHouse),丈母娘就同意。

总结

在这里插入图片描述

  • 都是双目运算符
  • 都有短路效果
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值