回顧一段舊代碼的變化,我看到了一個非常有趣的變化。有區別:jvm在這兩個java行有什麼區別:
if(retValue.equals("") || retValue == null){
if(retValue == null || retValue.equals("")){
有什麼建議嗎? jvm有什麼不同?
謝謝。
回顧一段舊代碼的變化,我看到了一個非常有趣的變化。有區別:jvm在這兩個java行有什麼區別:
if(retValue.equals("") || retValue == null){
if(retValue == null || retValue.equals("")){
有什麼建議嗎? jvm有什麼不同?
謝謝。
||
和&&
運算符是「懶惰」的:JVM一旦確定結果就會停止對錶達式的評估。
||
的情況下,只要其中一個操作數爲真,它就會停止==>整個表達式爲真。&&
,只要其中一個操作數爲false,它就會停止==>整個表達式爲false。從JLS #15.24(重點煤礦)報價:
的條件,或運營商
||
操作就像|
(§15.22.2),但評估其右邊的操作數只有當值它的左側操作數是假的。
當然。有一個明顯的區別。例如,在retValue爲null的情況下,第一個會導致NullPointerException。
-1解釋爲什麼應該幫助明確爲什麼會發生這種情況。 CFR短路評估。 – maasg 2012-07-23 14:10:26
如果其中任何一個語句爲真,則返回true。 這意味着如果將僅檢查第一條語句(例如,在第二行代碼)
retValue == null
,不會檢查第二,如果第一是真實的。這意味着第一行代碼可能意味着NullPointerException,如果retValue爲null,但第二行不會有NullPointerException,對於相同的輸入。
+1用於解釋這種行爲,稱爲[短路評估](http://en.wikipedia.org/wiki/Short-circuit_evaluation) – Wiseguy 2012-07-23 14:07:08
謝謝。問題解決了 ) – 2012-07-23 14:12:17