-4
    savedInstanceState = getIntent().getExtras();
    String type = savedInstanceState.getString(TYPE);
    if(type == "tree")
    {
        setContentView(R.layout.activity_sound_tree);
    }
    else
    {
        TextView tv = (TextView) findViewById(R.id.heading_sound);
        tv.setText("'"+type+"'");
    }

2 番目のアクティビティでこのコードを使用しました。タイプ == ツリーであることは確かです。したがって、最初の「if」ブロックが失敗する理由がわかりません。タイプ==「ツリー」であると100%確信しているにもかかわらず、常に「else」ブロックに移動します。誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

3

==文字列値を演算子と比較しないでください。equals代わりにメソッドを使用してください。

演算子は==、値ではなく参照によってオブジェクトを比較します。

Javadoc: http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

固定コード:

savedInstanceState = getIntent().getExtras();
String type = savedInstanceState.getString(TYPE);
if(type.equals("tree"))
{
    setContentView(R.layout.activity_sound_tree);
}
else
{
    TextView tv = (TextView) findViewById(R.id.heading_sound);
    tv.setText("'"+type+"'");
}
于 2013-05-23T16:59:57.970 に答える
0

使用する

type.equals("tree")

それ以外の

type == "tree"

理由

equls メソッドは、オブジェクトの値をチェックします。ここで、== 演算子は、オブジェクトの同じインスタンスであるかどうかをチェックします。

于 2013-05-23T17:02:24.003 に答える
0

これは古典的な文字列比較の質問のように見えます。試してみてください

"tree".equals(type); // This is also safe from NullPointerException since you are comparing type with a constant 'tree', which is not null

等しい理由

==vsの使用に関する詳細な説明は、ここequals()で見つけることができます

于 2013-05-23T17:00:05.533 に答える