2013-03-10 34 views
0
if (cevabb.getText().toString() == cev0.getText().toString()) {  
    Toast.makeText(test.this,"aaaa", Toast.LENGTH_LONG).show();  
} else { 
    Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG).show(); 
} 

cevabb.getText().toString()="xxx"cev0.getText().toString()="xxx",但消息顯示 「BBB」如果條件不成立,代碼錯在哪裏?

回答

4

使用String.equals()String比較法,因爲==比較的引用,而equals()用於內容比較。

if(string1.equals(string2)){ 
    // DO Something 
} 

您的情況: -

if(cevabb.getText().toString().equals(cev0.getText().toString())){ 
    // DO Something 
} 
3

cevabb.getText().toString()==cev0.getText().toString()

必須

cevabb.getText().toString().equals(cev0.getText().toString())

,或者如果要比較的對象

使用intern()

cevabb.getText().toString().intern()==(cev0.getText().toString())

4

這樣使用。

if (cevabb.getText().toString().equals(cev0.getText().toString())) { 

.... 

} 

==和equals()方法之間的區別。

==用於比較參考。和equals方法檢查字符串變量的內容。

例子。

第一個例子

String s1 = "FirstString"; 
String s2 = "FirstString"; 

if(s1 == s2) { 
    //This condition matched true because java don't make separate object for these two string. Both strings point to same reference. 
} 

第二個例子

String s1= "FirstString"; 
String s2 = new String("FirstString"); 

if(s1.equals(s2)) { 
    //This condition true because same content. 
} 

if(s1 == s2) { 
    //This condition will be false because in this java allocate separate reference for both of them 
} 

結論:Java的檢查字符串是否存在與否。如果我們使用new創建第二個字符串的對象並且具有不同的內容,那麼它創建對象並分配不同的引用,並且如果我們不使用new創建對象並且具有相同的內容,則它分配與第一個字符串相同的引用。

2

=運算符比較字符串在內存中的引用。 因此,具有相同值的字符串可能位於不同的內存位置 ,並且=運算符給出的結果爲false。

使用等於或equalsIgnorecase使得其比較存儲在字符串基準的值。