2012-01-23 3 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

==は、2つのオブジェクトを比較することです。equalsまたはequalsIgnoreCaseは、2つのオブジェクトの値を比較することです。

+0

Hm、Java固有の構文でなければならない - 私はC++に慣れている。ありがとう! –

3

equalsまたはequalsIgnoreCase==を使用していないを使用して文字列を比較してください。

あなたは大文字と小文字を探すためにコンパイラにしたい場合はif (plat.equals("Wordpress")) tv.append("900");

またはif (plat.equalsIgnoreCase("Wordoress")tv.append("900");でなければなりません。

+0

Hmは、Java固有の構文でなければなりません。私はC++に慣れています。ありがとう! –

1

これは、JavaがC++とまったく異なる場所です。

短い回答: ==プリミティブを比較するには、equals()を使用してオブジェクトを比較してください。

長い回答: 2つのオブジェクトを比較すると、==はそれらが同じオブジェクトであるかどうかを示します。あなたがそれを気にするかもしれない時がありますが、彼らは非常にまれです。通常、オブジェクトの内容を気にするので、equals()を使用します。これはオブジェクトのクラスが便利な形でequals()を実装していると仮定しています。inheriting from java.lang.Object.

文字列にはしわもあります。 Java文字列は不変です。既存の文字列の内容を変更することはできません。異なる文字列オブジェクトを指すように文字列変数を設定することしかできません。このため、コンパイラが2つの同一の文字列に遭遇した場合、それらを1つの文字列に置き換えて最適化することを選択することができます。文字列と

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

ので決して使用==:その場合は、==演算子は、予期しない結果を与える可能性があります。

+0

非常に有益な、ありがとう! –

関連する問題