2011-06-14 114 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。

相關問題