Java 中的逻辑运算符和短路
这篇文章对 java 中的短路进行了深入的了解,但是在 java 中进行短路之前,你必须知道什么是逻辑运算符以及如何将它们与各种表达式一起使用。
Java 中逻辑运算符的使用
逻辑运算符用于检查 2 个或多个返回布尔值的表达式的结果。
逻辑运算符也称为布尔运算符,它们计算的多个表达式称为复合表达式。它们是逻辑 AND (&&)
、逻辑 OR (||)
和逻辑 NOT (!)
。
Java 中非运算符 (!) 的使用
Not (!)
运算符是唯一的一元逻辑运算符。它检查一个条件并返回相反的结果,这意味着如果条件为假
,运算符将返回真
。
import java.io.*;
public class NotExample {
public static void main(String args[]) {
int big = 25, small = 10;
System.out.println("!(big < small) = " + !(big < small));
}
}
输出:
!(big < small) = true
在这里,(big < small)
返回 false
。由于条件之前存在 Not (!)
运算符,所以答案变为 true
。
在 Java 中使用短路
Java 中的短路是在评估逻辑表达式之后执行的跳过操作,因为最终结果是在评估整个表达式之前获得的。
Java 中的短路可能发生在:
-
逻辑
AND (&&)
运算符 - 有两种情况。如果第一个表达式返回true
,我们将检查第二个表达式是否也给出true
,返回true
作为最终答案。但是,如果第一个表达式在计算后返回
false
,并且第二个表达式由于条件已经失败而未计算,则会发生短路。
import java.io.*;
public class ANDExample {
public static void main(String arg[]) {
if (false && true && true) {
//
} else {
System.out.println("First false, condition failed, Short Circuiting!");
}
if (true && true && true) {
System.out.println("All true, no short circuiting!");
}
}
}
输出:
First false, condition failed, Short Circuiting!
All true, no short circuiting!
-
逻辑或 (||) 运算符 -
OR (||)
运算符表示如果第一个或第二个表达式返回true
,则条件满足,代码将运行。但是,如果我们的第一个条件返回
true
,则会发生短路,并且第二个表达式将被跳过,因为我们的条件已经满足。
public class ORExample {
public static void main(String arg[]) {
if (true || false || false) {
System.out.println("True found, condition met, short circuit!");
} else {
//
}
if (false || true) {
System.out.println("True found at end, condition met, no short circuit.");
}
}
}
输出:
True found, condition met, short circuit!
True found at end, condition met, no short circuit.
在 Java 中使用按位 AND (&)
和按位 OR (|)
运算符时不会发生短路。
And (&)
运算符 - 检查所有表达式的结果,当且仅当所有表达式为 true
时才返回 true
。
Or (|)
运算符 - 比较所有表达式的结果。如果其中一个表达式为真
,则输出将返回真
。
if (false | true) {
// Both conditions evaluated
}
if (false || true) {
// Only one condition evaluated
}
这两个条件都将在第一个 if 语句
中计算,但在第二个 if 语句
中,只计算第一个条件,跳过第二个条件。
只有在使用逻辑 AND (&&)
和逻辑 OR (||)
时才会执行短路。
在 Java 中使用短路的优点
如果预定条件已经满足或失败,java 中的短路有助于避免特定时间复杂的任务,从而减少计算时间和复杂性。
例如,如果你检查 N 个表达式的条件,则需要它们返回 true
。如果在任何位置计算返回 false
的表达式,例如 F«N 的 F,它可以显着减少执行时间。
编译器不计算表达式的总数,而是跳过 N-F 项。
在 Java 中使用短路的缺点
-
绕过逻辑:在某些情况下,短路可以忽略逻辑。假设我们正在使用具有两个条件的逻辑
OR
。第一个条件返回true
或false
,第二个条件调用另一个方法来完成程序特定部分的处理。如果满足第一个条件并发生短路,则不会调用对处理至关重要的另一个函数,从而绕过逻辑产生问题。
-
执行效率较低:短路可以减少代码执行时间,并在某些情况下增加它。一些编译器涉及不同的检查周期来验证短路评估,增加了额外的计算。
相关文章
Java 中的实例化是什么意思
发布时间:2023/11/14 浏览次数:100 分类:Java
-
本文讲授 Java 中的实例化主题。本文介绍了 Java 中的实例化概念。我们在 Java 中使用对象是因为它是一种面向对象的编程语言。
Java 中的可变参数
发布时间:2023/11/14 浏览次数:125 分类:Java
-
本文介绍了 Java 中的可变参数。变量参数 varargs 是 Java 中的一个概念。我们可以为方法提供可变数量的参数零或多个参数。
Java 中的静态块
发布时间:2023/11/14 浏览次数:111 分类:Java
-
本文介绍了静态块及其在 Java 中的用途。Java 在对象初始化之前使用静态块来执行代码。当我们用 static 关键字声明一个块时,我们称它为静态块。
在 Java 中实现树
发布时间:2023/11/14 浏览次数:104 分类:Java
-
本文教你在 Java 中如何实现树在本文中,我们将看到两种在 Java 中创建树结构的方法。树结构在多种方面都很有用,例如创建文件夹和文件名的目录。
Java 中的红黑树
发布时间:2023/11/14 浏览次数:58 分类:Java
-
在本教程中,我们将探索 Java 的红树和黑树。我们将讨论它们的评价和属性。首先,我们将从数据结构的角度演示如何使用它。稍后,我们将向你展示一些使用 Java 程序的旋转、搜索和
在 Java 中打印堆栈
发布时间:2023/11/14 浏览次数:146 分类:Java
-
本文介绍如何在 Java 中打印堆栈值。堆栈是一种数据结构,允许用户以后进先出模式添加元素。元素被添加到一个集合中,第一个插入的元素出现在最后一个。
Java 中的堆栈 pop 和 push 方法
发布时间:2023/11/14 浏览次数:85 分类:Java
-
这篇文章讲述了在 Java 中实现栈中的 pop 和 push 方法的方法。push 操作将一个元素添加到堆栈的最顶部位置,而 pop 操作删除堆栈的最顶部元素。我们将在下面的部分中介绍如何将堆栈的概念与
Java 中的单元测试
发布时间:2023/11/14 浏览次数:64 分类:Java
-
本文描述了 Java 中的单元测试,并展示了一个使用 JUnit 测试框架的简单示例。本文将讨论 Java 中的单元测试。有几种类型的测试,单元测试就是其中之一。
Java 中的超级构造函数
发布时间:2023/11/14 浏览次数:71 分类:Java
-
本文介绍 Java 中超级构造函数的使用。本文将讨论 super 关键字以从其子类调用父类的变量、函数和构造函数。以下部分展示了如何使用 super() 调用子类父级的构造函数。