entero - java diferencia== equals
¿Verifica== la igualdad total en los booleanos?-Java (3)
Así que he escuchado que si comparo 2 cadenas con ==, solo obtendré la verdad si ambas se refieren al mismo objeto / instancia. Eso es cuerdas. ¿Qué pasa con los booleanos?
¿Verifica == la igualdad total en los booleanos? - Java
Depende de si se está hablando de Boolean
s (el objeto envoltorio, note la capital B
) o boolean
s (el primitivo, note la minúscula b
). Si está hablando de Boolean
s (el contenedor de objetos), como con todos los objetos, ==
comprueba la identidad , no la equivalencia . Si estás hablando de boolean
s (primitivos), verifica la equivalencia.
Asi que:
Boolean a, b;
a = new Boolean(false);
b = new Boolean(false);
System.out.println("a == b? " + (a == b)); // "a == b? false", because they''re not the same instance
Pero
boolean c, d;
c = false;
d = false;
System.out.println("c == d? " + (c == d)); // "c == d? true", because they''re primitives with the same value
Respecto a las cuerdas:
He escuchado que si comparo 2 cadenas con == entonces solo obtendré verdadero si las cadenas son idénticas y ambas se refieren al mismo objeto / instancia ...
No es realmente un "and": ==
solo comprobará si las dos variables de String
refieren a la misma instancia de String
. Por supuesto, una instancia de String
solo puede tener un conjunto de contenidos, por lo que si ambas variables apuntan a la misma instancia, naturalmente, los contenidos son los mismos ... :-) El punto clave es que ==
notificará false
para diferentes instancias de String
incluso si tienen los mismos personajes en el mismo orden. Es por eso que usamos equals
en ellos, no ==
. Las cadenas pueden ser un poco confusas debido a la interning , que es específica de las cadenas (no hay equivalente para Boolean
, aunque cuando usas Boolean.valueOf(boolean)
, obtendrás un objeto guardado en caché). También tenga en cuenta que Java no tiene cadenas primitivas como lo hace primitiva boolean
, int
, etc.
Depende si se trata de tipos de valores como: int
, boolean
, long
o sobre tipos de referencia: Integer
, Boolean
, Long
. los tipos de valor podrían compararse con ==
, los tipos de referencia deben compararse con equals
.
Si tienes un uso de Objetos igual, cuando no, puedes ejecutar cosas como esta. (Caché de VM para primitivas autoboxing)
public static void main(String[] args){
Boolean a = true;
Boolean b = true;
System.out.println(a == b);
a = new Boolean(true);
b = new Boolean(true);
System.out.println(a == b);
}
La salida es VERDADERA y FALSA