18 java short short-circuiting
前几天我错过了我的课堂讲座,我想知道是否有人可以解释短路是什么,也许是一个简单的Java程序中使用它的例子.谢谢你的帮助!
T.J*_*der 43
短路是指一旦确定结果就停止评估表达式.例如:
if (a == b || c == d || e == f) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
如果a == b是真的,那么c == d与e == f被从来没有在所有的评估,因为表达式的结果已经确定.if a == b为false,然后c == d进行评估; 如果它是真的,那么e == f永远不会被评估.这似乎没有任何区别,但请考虑:
if (foo() || bar() || baz()) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
如果foo()返回true,那么bar与baz被从来没有所谓,因为表达式的结果已经确定.因此,如果bar或者baz除了返回某些东西(副作用)之外还有其他一些效果,那些效果永远不会发生.
一个很好的短路示例涉及对象引用:
if (a != null && a.getFoo() != 42) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
a.getFoo()通常会抛出一个NullPointerException如果a是null,但由于表达短路,如果a != null是false,该a.getFoo()部分不会发生,所以我们没有得到一个异常.
请注意,并非所有表达式都被短路.的||和&&运营商都短路,但|并&不是,也不是*或/; 事实上大多数运营商都没有.
| 归档时间: |
|
| 查看次数: |
39277 次 |
| 最近记录: |