2014-03-01 48 views
3

如果我寫多個if語句之間是否存在差異?

int a = 1; 
int b = 2; 

if (a == b) { 

//Do something 

} else if (a > b) { 

//Do something else 

} else if (a < b) { 

//Do something else 

} 

,而不是:

if (a == b) { 

//Do something 

} 
if (a > b) { 

//Do something else 

} 
if (a < b) { 

//Do something else 

} 

是有區別是它的編譯器編譯的代碼或速度的方法是什麼?我看不出有什麼邏輯上的差異,但肯定存在if else語句的原因。這只是一個換行符差異。

+0

可能重複[使用多個if語句和其他if語句之間有任何區別嗎?](http://stackoverflow.com/questions/4636191/is-there-any-difference -between-using-multiple-if-statements-and-else-if-stateme) –

回答

5

在上面的場景中,除速度外,它們是相同的。 If/else將比一系列if更快,因爲如果滿足if條件,則會跳過else語句。另一方面,在一系列的ifs中,每個條件被分別評估。

在其他情況下,當然邏輯不一樣,所以用一系列if代替if/else會破壞程序。例如:

// this: 
if(x <= 0) { 
    x = 1; 
} 
else { // only true if x started out > 0 
    x = 37; 
} 

// is different from this: 
if(x <= 0) { 
    x = 1; 
} 
if(x > 0) { // always true in this version 
    x = 37; 
} 
4

else-if聲明中,當符合條件時,跳過所有其他else-if s。

鑑於多個if語句,它必須經歷所有這些。

更確切地說,讓我們假設a=b

考慮您的第一個代碼塊:

int a = 1; 
int b = 1; 
if (a == b) 
{ 
    //Do something 
} 
else if (a > b) 
{ 
    //Do something else 
} 
else if (a < b) 
{ 
    //Do something else 
} 

在執行,因爲a=b,將跳過所有其他條件(a>b & a<b)。

  1. 檢查是否a=b

  2. 執行代碼塊。

  3. 所有其他跳過。

考慮你的第二個代碼塊:

int a = 1; 
int b = 1; 
if (a == b) 
{ 
    //Do something 
} 
if (a > b) 
{ 
    //Do something else 
} 
if (a < b) 
{ 
    //Do something else 
} 

即使滿足第一個條件,他們都將進行評估。

  1. 檢查是否a=b

  2. 執行代碼塊。

  3. 檢查是否a>b

  4. 檢查a<b

+0

這會提高速度嗎? – Milo

+1

它的確如此。 –

0

在你寫的第二種類型的代碼中。編譯器將爲每個真實語句顯示出來,並且不會跳過任何條件。其他命令用於確保兩個條件中的一個匹配。

-1

與多個if語句相比,if-else語句的時間複雜度較低。因此,如果 - 其他steements是非常有利的

相關問題