0

これまでの私のコードは次のとおりです。

ArrayList<String> matches = data
                .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

        String playString = "play";

        if( matches.get(0).toString() == playString)
        {

            // do something
        }

音声認識プロンプトは問題なく表示され、テストしたところ、実際に「再生」という言葉を言っていることを理解しています。ただし、if ステートメントで比較を行うと、. の有無にかかわらず毎回失敗しますtoString()。私は何を理解していませんか?

4

2 に答える 2

4

あなたのWHYの答えを与える。
演算子 == は、2 つのオブジェクト参照変数がオブジェクトのまったく同じインスタンスを参照しているかどうかをテストします。

メソッド .equals() は、比較対象の 2 つのオブジェクトが等しいかどうかをテストしますが、同じオブジェクトのまったく同じインスタンスである必要はありません。

例 #1:

Integer i = new Integer(10);
Integer j = i;

上記のコードで。i == j は、i と j の両方が同じオブジェクトを参照しているため、真です。

例 #2:

Integer i = new Integer(10);
Integer j = new Integer(10);

上記のコードでは、i == j は false です。どちらも値が 10 ですが、2 つの異なるオブジェクトであるためです。

また、上記のコードでは、i.equals(j) は true です。これらは 2 つの異なるオブジェクトですが、同じ数値 10 を表すという点で同等であるためです。

于 2012-07-04T05:56:46.050 に答える
2

次のように使用する代わりに==:if( matches.get(0).toString() == playString)

.equals()次のように使用します。if( matches.get(0).toString().equals(playString)

于 2012-07-04T03:42:57.627 に答える