2012-01-23 107 views
0

我試過幾十種不同的組合,我不知道爲什麼這不起作用 - 它的邏輯是完全合理的。比較從捆綁到本地值的字符串

我從前一個活動中傳遞了一個包,它將來自微調控件的值存儲到一個字符串中。然後,我正在閱讀字符串,如果它與我指定的任何東西都是同等的 - 就此採取行動。

我已經將字符串直接打印到TextView中,以確保我獲得了預期的結果,而且我 - 但它仍然不會註冊。

TextView tv; 

    Bundle extras = getIntent().getExtras(); 
    tv = (TextView) findViewById(R.id.textView2); 
    tv.append(extras.getString("pageNumber")); 
    tv = (TextView) findViewById(R.id.textView3); 
    int base = Integer.parseInt(extras.getString("pageNumber")) * 70; 
    tv.append(Integer.toString(base)); 

/* Here is where I'm editing */ 
    tv = (TextView) findViewById(R.id.textView4); 
    String plat = extras.getString("platform"); 
    if (plat == "Wordpress") tv.append("900"); 

我對微調陣列在我的strings.xml中定義和如下:

<string-array name="platform_array"> 
    <item>None</item> 
    <item>Joomla</item> 
    <item>Wordpress</item> 
    <item>Drupal</item> 
</string-array> 

回答

5

==是比較兩個對象,equalsequalsIgnoreCase是比較兩個對象的值。

+0

Hm,必須是Java特定的語法 - 我習慣C++。謝謝! –

3

使用equalsequalsIgnoreCase不使用==字符串比較。

應該if (plat.equals("Wordpress")) tv.append("900");

if (plat.equalsIgnoreCase("Wordoress")tv.append("900");如果你想編譯器查找小寫和大寫。

+0

嗯,必須是Java特定的語法 - 我習慣於C++。謝謝! –

1

是的,這是Java與C++完全不同的地方之一。

簡短回答:使用==比較基元,使用equals()來比較對象。

長答案:比較兩個對象時,==會告訴你它們是否是同一個對象。有些時候你可能會關心這一點,但他們非常罕見。通常,您關心對象的內容,因此您想使用equals()。並且這假定對象的類實現equals()在一個有用的方式,而不是隻是inheriting from java.lang.Object.

還有一個額外的字符串皺紋。 Java字符串是不可變的;您不能更改現有字符串的內容,您只能將字符串變量設置爲指向不同的字符串對象。因此,如果編譯器遇到兩個相同的字符串,它可能會選擇通過用一個字符串替換它們來優化它們。在這種情況下,==操作符可以產生意外的結果:

String a = "a"; 
    String b = "a"; 
    (a == b) // evaluates to true 

所以從未使用==與字符串。

+0

非常豐富,謝謝! –