2013-12-14 142 views
4

K想比較兩個字符串,但equals()方法總是返回true,所以if語句總是運行。爲什麼會發生?String.equals()總是返回true

resultString = "Test1"; 
String CompleteString = "Test"; 
if(CompleteString.equals(resultString)); 
{ 
    rowView.setBackgroundResource(R.color.listselect_red); 
} 

回答

16

if(CompleteString.equals(resultString)); < - 刪除;

你的代碼是等價於:

if(CompleteString.equals(resultString)) 
{ 
    //empty block 
} 
{ 
    rowView.setBackgroundResource(R.color.listselect_red); 
} 

所以,如果等於返回true,則空塊將被執行,而第二塊之後將是總是執行任何如果是falsetrue

+1

謝謝,我沒有看到!有時候犯這樣一個愚蠢的錯誤讓我很生氣 – Memento

+1

我犯了錯誤,因爲我沒有看到那個分號,有時會發生,但我不明白downvote?這些網站提出了這樣的問題,其中一些難以解決,其中一些很容易! – Memento

4

刪除if語句後的;

if(CompleteString.equals(resultString)) 
{ 
    rowView.setBackgroundResource(R.color.listselect_red); 
} 
2

if(CompleteString.equals(resultString));

;除去;裝置語句的端部,從而即使在if()returnsfalsetrue所有語句本if()之後將executed.So rowView.setBackgroundResource(R.color.listselect_red);將被執行的所有的時間。

嘗試這種方式

resultString = "Test1"; 
String CompleteString = "Test"; 
if(CompleteString.equals(resultString))// removed `;` 
{ 
    rowView.setBackgroundResource(R.color.listselect_red); 
} 
2

這是因爲 ';'在if的結尾。只要刪除,它會工作!

2
if(CompleteString.equals(resultString)); 

塊,如果它看起來像一個空的條件:)它不會進入

2

這是因爲分號的,如果條件..

正確的代碼

resultString = "Test1"; 
String CompleteString = "Test"; 
if(CompleteString.equals(resultString)) 
{ 
    rowView.setBackgroundResource(R.color.listselect_red); 
} 
+1

它爲我工作.... !!! – 2013-12-14 11:08:49