java - 什么是短路,在 Java 编程中如何使用?

标签 java short short-circuiting

<分区>

Possible Duplicate:
Does java evaluate remaining conditions after boolean result is known
Why do we usually use || not |, what is the difference?

前几天我错过了我的类讲座,我想知道是否有人可以解释什么是短路,并可能在一个简单的 Java 程序中使用它的例子。感谢您的帮助!

最佳答案

短路是指在确定表达式的结果后立即停止对其求值。例如:

if (a == b || c == d || e == f) {
    // Do something
}

如果 a == b 为真,则 c == de == f 根本不会计算,因为表达式的结果已经确定。如果 a == b 为假,则评估 c == d;如果它是 true,那么永远不会评估e == f。这似乎没有任何区别,但请考虑:

if (foo() || bar() || baz()) {
    // Do something
}

如果 foo() 返回 true,则 barbaz 永远不会调用,因为表达式的结果已经确定了。因此,如果 barbaz 除了返回某些内容(副作用)之外还有一些其他效果,这些效果永远不会发生。

短路的一个很好的例子与对象引用有关:

if (a != null && a.getFoo() != 42) {
    // Do something
}
如果 anull

a.getFoo() 通常会抛出一个 NullPointerException,但是因为表达式短路,如果 a != nullfalse,则 a.getFoo() 部分永远不会发生,因此我们不会得到异常。

请注意,并非所有表达式都是短路的。 ||&& 运算符被短路,但是|& 不是, 也不是>*/;事实上,大多数运营商都不是。

关于java - 什么是短路,在 Java 编程中如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344305/

相关文章:

java - WeakHashMap - 它的目的是什么以及应该如何正确使用它

Java:必须转换为短,不能使用简写 'S'

c# - 在 C# 中将 2 个字节转换为 Short

c++ - 是否强制要求短路逻辑运算符?和评价顺序?

php - PHP中使用逻辑运算符的变量赋值

java - 直接从数据库发布 Web 服务

java - MQ CCDT AMQ9516 FileNotFoundException

java - 访问内部类方法会导致 nullpointerException

c - 如何打印 short int C 对象的字节表示

Python - 短路奇怪的行为