<分区>
Possible Duplicate:
Does java evaluate remaining conditions after boolean result is known
Why do we usually use||
not|
, what is the difference?
前几天我错过了我的类讲座,我想知道是否有人可以解释什么是短路,并可能在一个简单的 Java 程序中使用它的例子。感谢您的帮助!
<分区>
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 == d
和 e == f
根本不会计算,因为表达式的结果已经确定。如果 a == b
为假,则评估 c == d
;如果它是 true,那么永远不会评估e == f
。这似乎没有任何区别,但请考虑:
if (foo() || bar() || baz()) {
// Do something
}
如果 foo()
返回 true,则 bar
和 baz
永远不会调用,因为表达式的结果已经确定了。因此,如果 bar
或 baz
除了返回某些内容(副作用)之外还有一些其他效果,这些效果永远不会发生。
短路的一个很好的例子与对象引用有关:
if (a != null && a.getFoo() != 42) {
// Do something
}
如果 a
为 null
,a.getFoo()
通常会抛出一个 NullPointerException
,但是因为表达式短路,如果 a != null
为 false
,则 a.getFoo()
部分永远不会发生,因此我们不会得到异常。
请注意,并非所有表达式都是短路的。 ||
和&&
运算符被短路,但是|
和&
不是, 也不是>*
或 /
;事实上,大多数运营商都不是。
关于java - 什么是短路,在 Java 编程中如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344305/