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