一尘不染

什么是短路?在Java中编程时如何使用短路?[重复]

java

我想知道是否有人可以解释什么是短路,也许是在简单的Java程序中使用的一个例子。谢谢你的帮助!


阅读 285

收藏
2020-03-20

共1个答案

一尘不染

短路是确定结果后立即停止对表达式求值的地方。因此,例如:

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

如果a == btrue,则c == d并且e == f根本不会进行评估,因为表达式的结果已经确定。如果a == b为假,c == d则被评估;如果是真的,则e == f永远不会进行评估。这似乎没有什么区别,但请考虑:

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

如果foo()返回true,那么barbaz被从来没有所谓,因为表达式的结果已经确定。所以,如果bar还是baz已经不仅仅是返回的东西(一个其他一些效果副作用),这些影响不会发生。

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

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

a.getFoo()通常会抛出一个NullPointerException如果anull,但由于表达短路,如果a != nullfalse,该a.getFoo()部分不会发生,所以我们没有得到一个异常。

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

2020-03-20