Pregunta

¿Por qué se imprime la salida equivocada?

ArrayList<String> loc = new ArrayList<String>();

Esta ArrayList almacena el valor de:

[topLeft, topLeft, topLeft, bottomLeft, topLeft, bottomLeft, topLeft, topLeft, Left, topLeft]

el índice abetos 0 es = topLeft

if(loc.get(1)=="topLeft")
   System.out.println("same")

else {
   System.out.println("not same")
}

Este programa imprime el not same salida equivocada en lugar de same

¿Fue útil?

Solución

Utilice el método equals(Object), no el operador ==, por ejemplo loc.equals("topLeft")

El operador == devuelve verdadero si dos referencias apuntan al mismo objeto en la memoria. La equals (Object o) método comprueba si los dos objetos son equivalentes, por lo devolverá verdadero si dos cadenas contienen sólo los mismos caracteres en el mismo orden.

Otros consejos

comparación de cadenas se hace llamando str1.equals(str2) en lugar de utilizar ==.

  • equals(..) compara el contenido de las cuerdas
  • == compara las referencias, y no son el mismo.

Hay un poco más para saber, sin embargo. objetos String que se inicializan como literales, es decir

String str = "someString"

en lugar de a través de la construcción (String str = new String("some")) son todos el mismo objeto. Para ellos == funcionaría.

Y, por último, para cualquier String, llamando intern() devuelve un String que es el mismo objeto que el resto de las cadenas con el mismo contenido. (Leer la documentación de intern() para obtener más información)

Sin embargo, la mejor práctica es usar equals(), teniendo cuidado si el objeto al que está llamando en (la primera cadena) no es null.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top