Testar com a Classe Wrapper Boolean
Na etapa anterior, trabalhamos com o tipo primitivo boolean. Java também possui uma classe wrapper correspondente chamada Boolean. As classes wrapper fornecem uma maneira de usar tipos de dados primitivos como objetos. Isso é particularmente útil ao trabalhar com coleções ou quando você precisa representar um valor booleano que pode ser null.
A classe Boolean possui dois objetos predefinidos para os valores booleanos: Boolean.TRUE e Boolean.FALSE. Estes são objetos constantes que representam os valores booleanos true e false, respectivamente.
Ao trabalhar com objetos Boolean, você ainda pode usar o operador de igualdade == para compará-los. No entanto, é importante entender como == funciona com objetos. Para objetos, == verifica se as duas variáveis se referem ao exatamente o mesmo objeto na memória, não apenas se eles têm o mesmo valor.
Vamos modificar nosso programa para usar a classe wrapper Boolean e ver como o operador de igualdade se comporta.
-
Abra o arquivo HelloJava.java no editor WebIDE.
-
Substitua o código pelo seguinte:
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.");
}
}
}
Vamos analisar as mudanças:
Boolean isJavaFunObject = Boolean.TRUE;: Declaramos uma variável do tipo Boolean e atribuímos a ela a constante Boolean.TRUE.
if (isJavaFunObject == Boolean.TRUE): Usamos o operador de igualdade == para comparar nosso objeto Boolean com a constante Boolean.TRUE. Como isJavaFunObject recebe Boolean.TRUE, eles se referem ao mesmo objeto, então essa condição será true.
Boolean anotherBooleanObject = true;: Esta linha demonstra "autoboxing". Java converte automaticamente o valor primitivo boolean true em um objeto Boolean.
if (anotherBooleanObject == Boolean.TRUE): Novamente, usamos == para comparar anotherBooleanObject com Boolean.TRUE. Devido à forma como o autoboxing funciona e ao cache de valores Boolean do Java, para os valores true e false, os objetos Boolean autoboxed frequentemente se referem às mesmas instâncias em cache que Boolean.TRUE e Boolean.FALSE. Portanto, essa condição também provavelmente será true.
-
Salve o arquivo.
-
Compile o programa:
javac HelloJava.java
-
Execute o programa:
java HelloJava
Você deve ver a saída:
Java is fun (using Boolean.TRUE)!
Another boolean object is true!
Isso confirma que usar == com Boolean.TRUE funciona como esperado nesses casos porque as variáveis provavelmente estão referenciando o mesmo objeto Boolean.TRUE subjacente.
No entanto, confiar em == para comparar objetos Boolean pode ser arriscado em cenários mais complexos, especialmente se os objetos Boolean forem criados de maneiras diferentes ou vierem de fontes diferentes. Uma maneira mais segura e recomendada de comparar objetos Boolean para igualdade de valor é usar o método .equals().
Vamos modificar o código para usar .equals().
-
Abra HelloJava.java no editor.
-
Altere as instruções if para usar .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).");
}
}
}
Substituímos == Boolean.TRUE por .equals(Boolean.TRUE). O método .equals() compara o valor dos objetos, não sua localização na memória.
-
Salve o arquivo.
-
Compile o programa:
javac HelloJava.java
-
Execute o programa:
java HelloJava
Você deve ver a saída:
Java is fun (using equals)!
Another boolean object is true (using equals)!
Usar .equals() é a maneira padrão e mais segura de comparar objetos Boolean para igualdade de valor.
Em resumo, embora == possa funcionar para comparar objetos Boolean com Boolean.TRUE devido ao cache, o método .equals() é a maneira preferida e mais confiável de verificar se um objeto Boolean representa o valor true.