Análisis de los resultados del reconocimiento de voz de Android

Este es mi código hasta ahora:

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

        String playString = "play";

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

            // do something
        }

El indicador de reconocimiento de voz aparece bien, lo probé y, de hecho, comprende que estoy diciendo la palabra "jugar". Sin embargo, al hacer la comparación en la declaración if, falla cada vez, con o sin la toString(). ¿Qué no estoy entendiendo?

preguntado el 04 de julio de 12 a las 04:07

2 Respuestas

dando respuesta de su WHY.
El operador, ==, prueba para ver si dos variables de referencia de objeto se refieren exactamente a la misma instancia de un objeto.

El método, .equals(), comprueba si los dos objetos que se comparan entre sí son equivalentes, pero no es necesario que sean exactamente la misma instancia del mismo objeto.

Ejemplo #1:

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

en el código anterior. i == j es verdadera porque tanto i como j se refieren al mismo objeto.

Ejemplo #2:

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

En el código anterior, i == j es falso porque, aunque ambos tienen el valor 10, son dos objetos diferentes.

Además, en el código anterior, i.equals(j) es cierto porque aunque son dos objetos diferentes, son equivalentes en el hecho de que representan el mismo número, 10.

respondido 26 mar '13, 12:03

Se agradecerá mucho su voto ;) - Waqas

En lugar de usar == me gusta: if( matches.get(0).toString() == playString)

Utiliza .equals() me gusta: if( matches.get(0).toString().equals(playString)

Respondido 25 ago 12, 09:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.