短路是确定结果后立即停止对表达式求值的地方。因此,例如:
if (a == b || c == d || e == f) { // Do something}如果
a == b为
true,则
c == d并且
e == f根本不会进行评估,因为表达式的结果已经确定。如果
a == b为假,
c == d则被评估;如果是真的,则
e == f永远不会进行评估。这似乎没有什么区别,但请考虑:
if (foo() || bar() || baz()) { // Do something}如果
foo()返回true,那么
bar与
baz被从来没有所谓,因为表达式的结果已经确定。所以,如果
bar还是
baz已经不仅仅是返回的东西(一个其他一些效果副作用),这些影响不会发生。
短路的一个很好的例子与对象引用有关:
if (a != null && a.getFoo() != 42) { // Do something}a.getFoo()通常会抛出一个
NullPointerException如果
a是
null,但由于表达短路,如果
a != null是
false,该
a.getFoo()部分不会发生,所以我们没有得到一个异常。
请注意,并非所有表达式都是短路的。的
||和
&&运营商被短路,但
|并
&不是,也不是
*或
/; 实际上大多数操作员都不是。


![什么是短路?在Java中编程时如何使用短路?[重复] 什么是短路?在Java中编程时如何使用短路?[重复]](http://www.mshxw.com/aiimages/31/441906.png)
