2010-09-12 114 views
1

如果你有兩個if聲明:IF語句是否相互衝突?

int n = -1; 

if (n < 0) 
    return null; 

if (n <= 1) 
    return "yay"; 

將它返回null或耶?它會通過代碼從上到下運行,並在第一個if聲明處停止,還是將使用最後一個?

+0

@MAK:剛剛修復了 – 2010-09-12 21:32:49

回答

3

當然,第一個if語句將被首先評估。 n這是-1其實< 0,所以與該if聲明相關的代碼體將被執行。null將被退回。

您可能會感到困惑的是,雖然第二個if聲明將評估爲真,但它永遠不會被評估。這是因爲return語句在執行時會留下它所在的函數/方法。

如果你寫道:

int x = 0; 
return x; 
x = 5; 

x將被設置爲0。將返回x。返回後的任何代碼行都不會執行。

這裏是另外一個例子,以澄清:

​​

x將被設置爲10x這是10實際上是而不是< 0,所以if語句的正文將被跳過。 x將被設置爲0

+0

另外,如果您在第一個if中沒有返回,請注意兩者都會被執行! – nico 2010-09-12 22:06:34

0

它會返回null。

BTW在Java的「如果」是無效的,你必須使用「如果」和IFS

0

它會通過代碼從上到下運行,並在第一個IF語句

停止圓括號

是的,它會的。如果確實如此,那麼它將立即返回null。 (我不知道爲什麼你標記這個問題如Java不過,您發佈的代碼不是Java代碼。)

1

它會返回null,只是因爲返回(在第一次測試)是指第二次測試將不執行。

1

它將返回null,因爲它是第一個匹配的條件。返回之後,函數的其餘部分不會執行,並且函數會按順序執行,所以它們永遠不會發生衝突。

的「衝突的if語句」另一個樣品是當你創建一個無法達成的代碼,例如:

if (n < 0) 
    return "a"; 

if (n == -1) 
    return "b"; 

此代碼將不會返回「B」,編譯器可能會錯誤或警告它。原因是當n = -1時,第一個語句總是被打中,所以第二個語句永遠不會到達。

0

將返回null。一旦你點擊了返回語句,控制就返回到調用函數,將函數的返回值設置爲你在返回關鍵字後指定的值。

1

它返回null,因爲它是它遇到的第一個返回。它甚至不檢查第二個異常。

當代碼運行時,JVM檢查的第一個條件,如果和,當條件滿足時,執行這是什麼,如果裏面。如果有return null那麼它返回null。返回後,此方法中不執行任何代碼。唯一的例外是在此嘗試之後,您在try區塊和finally區塊中有回報。

1

這只是您的代碼的一小部分重新格式,並帶有一些明確的註釋。我發現明確的大括號可以幫助一些人看到發生了什麼。 只需按照程序流程如果從該函數返回,則不會執行該函數中的後續語句。(這是一個白色的謊言,看'終於'異常處理,但禁止...) - 這是一個非常程序化(逐步)的過程。

int n = -1; 
if (n < 0) { 
    return null; // no other statement in this function will be executed 
       // if this line is reached 
} 
if (n <= 1) { 
    return "yay"; // no other statement in this function will be executed 
        // if this line is reached 
} 
0

它將返回null。您發佈的代碼的唯一價值將會導致'Yay'返回將是0.