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
运算符 == 测试两个对象引用变量是否引用了完全相同的对象实例。

方法 .equals() 测试两个被比较的对象是否相等——但它们不必是同一对象的完全相同的实例。

示例 #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 是假的,因为尽管它们的值都是 10,但它们是两个不同的对象。

此外,在上面的代码中,i.equals(j) 是正确的,因为尽管它们是两个不同的对象,但它们是等价的,因为它们代表相同的数字 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 回答