leer los elementos de ArrayList
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
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
.