Probar con la clase envolvente Boolean
En el paso anterior, trabajamos con el tipo primitivo boolean
. Java también tiene una clase envolvente correspondiente llamada Boolean
. Las clases envolventes proporcionan una forma de utilizar tipos de datos primitivos como objetos. Esto es especialmente útil cuando se trabaja con colecciones o cuando se necesita representar un valor booleano que podría ser null
.
La clase Boolean
tiene dos objetos predefinidos para los valores booleanos: Boolean.TRUE
y Boolean.FALSE
. Estos son objetos constantes que representan los valores booleanos true
y false
, respectivamente.
Cuando se trabaja con objetos Boolean
, todavía se puede utilizar el operador de igualdad ==
para compararlos. Sin embargo, es importante entender cómo funciona ==
con objetos. Para objetos, ==
verifica si las dos variables se refieren al mismo objeto exacto en memoria, no solo si tienen el mismo valor.
Vamos a modificar nuestro programa para utilizar la clase envolvente Boolean
y ver cómo se comporta el operador de igualdad.
-
Abre el archivo HelloJava.java
en el editor WebIDE.
-
Reemplaza el código con el siguiente:
public class HelloJava {
public static void main(String[] args) {
Boolean isJavaFunObject = Boolean.TRUE;
if (isJavaFunObject == Boolean.TRUE) {
System.out.println("Java is fun (using Boolean.TRUE)!");
} else {
System.out.println("Java is not fun (using Boolean.TRUE).");
}
Boolean anotherBooleanObject = true; // Autoboxing
if (anotherBooleanObject == Boolean.TRUE) {
System.out.println("Another boolean object is true!");
} else {
System.out.println("Another boolean object is not true.");
}
}
}
Veamos los cambios:
Boolean isJavaFunObject = Boolean.TRUE;
: Declaramos una variable de tipo Boolean
y le asignamos la constante Boolean.TRUE
.
if (isJavaFunObject == Boolean.TRUE)
: Utilizamos el operador de igualdad ==
para comparar nuestro objeto Boolean
con la constante Boolean.TRUE
. Dado que isJavaFunObject
se le asignó Boolean.TRUE
, se refieren al mismo objeto, por lo que esta condición será true
.
Boolean anotherBooleanObject = true;
: Esta línea demuestra "autoboxing" (autocaja). Java convierte automáticamente el valor primitivo boolean
true
en un objeto Boolean
.
if (anotherBooleanObject == Boolean.TRUE)
: Nuevamente utilizamos ==
para comparar anotherBooleanObject
con Boolean.TRUE
. Debido a cómo funciona el autoboxing y el almacenamiento en caché de valores Boolean
en Java, para los valores true
y false
, los objetos Boolean
autocajados a menudo se refieren a las mismas instancias almacenadas en caché que Boolean.TRUE
y Boolean.FALSE
. Por lo tanto, esta condición también probablemente será true
.
-
Guarda el archivo.
-
Compila el programa:
javac HelloJava.java
-
Ejecuta el programa:
java HelloJava
Deberías ver la salida:
Java is fun (using Boolean.TRUE)!
Another boolean object is true!
Esto confirma que utilizar ==
con Boolean.TRUE
funciona como se espera en estos casos porque las variables probablemente se refieren al mismo objeto Boolean.TRUE
subyacente.
Sin embargo, confiar en ==
para comparar objetos Boolean
puede ser arriesgado en escenarios más complejos, especialmente si los objetos Boolean
se crean de diferentes maneras o provienen de diferentes fuentes. Una forma más segura y recomendada de comparar objetos Boolean
para la igualdad de valor es utilizar el método .equals()
.
Vamos a modificar el código para utilizar .equals()
.
-
Abre HelloJava.java
en el editor.
-
Cambia las declaraciones if
para utilizar .equals()
:
public class HelloJava {
public static void main(String[] args) {
Boolean isJavaFunObject = Boolean.TRUE;
if (isJavaFunObject.equals(Boolean.TRUE)) {
System.out.println("Java is fun (using equals)!");
} else {
System.out.println("Java is not fun (using equals).");
}
Boolean anotherBooleanObject = true; // Autoboxing
if (anotherBooleanObject.equals(Boolean.TRUE)) {
System.out.println("Another boolean object is true (using equals)!");
} else {
System.out.println("Another boolean object is not true (using equals).");
}
}
}
Reemplazamos == Boolean.TRUE
con .equals(Boolean.TRUE)
. El método .equals()
compara el valor de los objetos, no su ubicación en memoria.
-
Guarda el archivo.
-
Compila el programa:
javac HelloJava.java
-
Ejecuta el programa:
java HelloJava
Deberías ver la salida:
Java is fun (using equals)!
Another boolean object is true (using equals)!
Utilizar .equals()
es la forma estándar y más segura de comparar objetos Boolean
para la igualdad de valor.
En resumen, si bien ==
puede funcionar para comparar objetos Boolean
con Boolean.TRUE
debido al almacenamiento en caché, el método .equals()
es la forma preferida y más confiable de verificar si un objeto Boolean
representa el valor true
.