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
,第二个条件调用另一个方法来完成程序特定部分的处理。如果满足第一个条件并发生短路,则不会调用对处理至关重要的另一个函数,从而绕过逻辑产生问题。
-
执行效率较低:短路可以减少代码执行时间,并在某些情况下增加它。一些编译器涉及不同的检查周期来验证短路评估,增加了额外的计算。