2012-03-15 61 views
1

我碰到這樣的代碼:爲什麼我可以使用.equalsIgnoreCase(「anoterString」)而不將其分配給變量或控制流語句內?

for (final String s : myList) 
    { 
     s.equalsIgnoreCase(test); 
     updateNeeded = true; 
     break;    
    } 

我懷疑這是不是程序員真正想做的事。我相信他打算寫這樣的東西:

for (final String s : myList) 
    { 
     if(s.equalsIgnoreCase(test)) 
     { 
      updateNeeded = true; 
       break; 
     } 
    } 

但是,我不明白爲什麼在第一個代碼段沒有錯誤。

s.equalsIgnoreCase(test);  

,因爲該方法.equalsIgnoreCase(「anoterString」)返回一個布爾值,它沒有被分配到任何東西,或流程控制語句

+0

您不必強制分配返回值。 – 2012-03-15 08:43:19

+0

如果您不需要它以備將來使用,則不需要分配返回的值。 – 2012-03-15 08:43:24

+0

@Michael,我明顯在看第二個片段。並不是說這個問題在這個討論的數量上值得參考......或者任何地方。 – 2012-03-15 08:57:18

回答

5

這只是一個方法調用。你不要使用方法調用的任何其他結果。

這是很少一個好主意,忽略一個非void方法的結果(特別的InputStream.read返回值有時被忽略時,它確實不應該),但語言規範不作任何試圖調用這是一個問題。

2

它可能應該意思是你想象中的使用。你可以調用一個方法而不是分配它的結果,因爲有時你不需要結果。

1

大多數編程語言允許您忽略方法的返回代碼。 有些時候你不會在乎返回的價值,在這種情況下,你應該被允許。

2

你說得對,這可能是一個錯誤。但是,Java編譯器無法知道equalsIgnoreCase方法是「純函數」,即不產生副作用,除非保持其返回值,否則無意義。

+0

原則上它可能(例如,如果所調用的函數僅使用局部變量),但爲什麼還要考慮這種啓發式和冒險絆倒某些邊緣情況?就像Ben和Binyamin Sharet所說的那樣,有時你只是不在意返回值,而應該是程序員的代表。在這種情況下可能是一個錯誤,在其他情況下可能不是這樣。 – 2012-03-15 08:54:27

相關問題