2010-04-24 12 views
14

Tengo un problema que me causa cierta confusión. Tengo las siguientes líneas de código en mi aplicación Android:Las cadenas no parecen ser iguales en Java en Android, a pesar de que imprimen el mismo

System.out.println(CurrentNode.getNodeName().toString()); 
if (CurrentNode.getNodeName().toString() == "start") { 
    System.out.println("Yes it does!"); 
} else { 
    System.out.println("No it doesnt"); 
} 

Cuando miro a la salida de la primera sentencia println Se manifiesta en LogCat como "start" (sin las comillas obviamente). Pero luego, cuando la instrucción if se ejecuta, va a la instrucción else e imprime "No, no".

Me pregunté si el nombre del nodo podría tener algún tipo de carácter no imprimible, así que he comprobado la longitud de la cadena proveniente de getNodeName() y tiene 5 caracteres, como era de esperar .

¿Alguien tiene alguna idea de lo que está pasando aquí?

Respuesta

44

Utilice el método equals de String para comparar cadenas. El operador == simplemente comparará referencias de objetos.

if (CurrentNode.getNodeName().toString().equals("start")) { 
    ... 
+0

¿Cuál será el resultado de 'CurrentNode.getNodeName(). ToString(). Equals (" start ") ==" start ".equals (CurrentNode.getNodeName(). ToString()'? –

+0

@MohammedShareefC I ' d esperar 'verdadero', pero puedes probarlo para averiguarlo –

+0

yup Lo siento por ser demasiado vago –

7

Es necesario utilizar .equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... } 
13

Use CurrentNode.getNodeName().toString().equals("start").

En Java, uno de los errores más comunes que conocen los recién llegados es usar == para comparar cadenas. Debe recordar que == compara el objeto con la identidad (piense direcciones de memoria), no el contenido .

+0

muchas gracias por esta explicación .. Perdí horas preciosas preguntándome por qué diablos == no funciona – imin

Cuestiones relacionadas