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
    评论
Java中,算数运算符、赋值运算符逻辑运算符常常用于处理数值和布尔类型的操作。以下是它们可能出现的一些问题: 1. 算数运算符问题: - 整数溢出:当进行算术运算时,如果结果超出了整数类型的表示范围,就会发生整数溢出。解决方法是使用更大的数据类型或者进行合适的边界检查。 - 浮点数精度丢失:在处理浮点数时,由于浮点数的精度限制,可能会出现精度丢失的情况。解决方法是使用BigDecimal类进行精确计算。 2. 赋值运算符问题: - 类型不匹配:如果将一个值赋给不兼容的类型,会导致编译错误。解决方法是确保赋值的类型与目标变量的类型匹配。 - 值覆盖:在连续赋值时,如果不小心覆盖了之前的值,可能会导致逻辑错误。解决方法是检查赋值语句的顺序和逻辑。 3. 逻辑运算符问题: - 短路求值:在使用逻辑运算符时,由于短路求值的特性,可能会导致某些表达式不被执行。解决方法是根据业务需求合理安排逻辑运算符的顺序。 - 位运算错误:当使用位运算符时,如果对数据类型不熟悉,可能会导致逻辑错误。解决方法是仔细了解位运算符的行为和使用场景。 总体而言,遇到这些问题时,需要仔细检查代码并进行适当的调试和测试。此外,深入了解Java运算符的行为和使用规则也是避免这些问题的关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java追光着

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

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

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

打赏作者

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

抵扣说明:

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

余额充值