2011-06-14 90 views

回答

9

不,它不会。如果namenull,那么name.equals()将不会被执行(因为false && anything仍然是false)。顺便说一句:如果左手边的计算结果为true,则不检查右手边。

+0

只是好奇,短路评估叫什么?有没有其他语言可以实现这种行为,上述问题可能会导致NPE? – zengr 2011-06-14 05:01:37

+1

维基百科说,“热切的评价”(按照我给出的链接),但我从来没有听说过这个术语。我会说“贪婪”,因为这是正则表达式中用来取最大匹配而不是最短匹配的术语。看起来像Fortran做到了,Pascal可以做到这一点。尽管Visual Basic变体似乎提供了_means_,但它们也不会短路。 – paxdiablo 2011-06-14 05:02:36

+0

我曾见过他们称之为非短路操作员的情况:) – Vern 2011-06-14 05:12:06

2

不,它不会。 & &操作的右侧被执行只有& &运营商的左侧是真实的。

同样在的情况下。运营商,如果左手边是真的,右手边将不会被执行。

+0

RHS =右手侧,LHS =左手侧。 – 2011-06-14 07:33:24

+0

谢谢@Adriaan – 2011-06-14 08:15:53

0

不,它不会导致NullPointerException,因为如何编写if语句。您有:从左至右

if (name != null && name.equals("XYZ")) { 
    //do stuff... 
} 

if语句中的条件进行评估。因此,如果name为空,则name != null条件评估为false,并且由于false && <anything>评估为false,所以name.equals("XYZ")条件甚至不会被评估。

此行为是一个runtime optimization,它避免执行不会影响if语句结果的代码,并且它恰好也会阻止您的示例代码生成NullPointerException。

相关问题