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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,