Introdução
Neste laboratório, você aprenderá como verificar se uma variável booleana é true em Java. Exploraremos o método fundamental usando o operador de igualdade, aprofundaremos o tratamento da classe wrapper Boolean e discutiremos como gerenciar potenciais valores nulos.
Através de exemplos práticos, você obterá experiência prática na escrita de lógica condicional baseada em valores booleanos, garantindo que seu código Java seja robusto e lide com diferentes cenários de forma eficaz.
Usar o Operador de Igualdade para Verificação de Verdadeiro
Nesta etapa, exploraremos como verificar se uma variável booleana é true em Java usando o operador de igualdade. Embora possa parecer simples, entender as nuances é importante para escrever um código limpo e correto.
Em Java, o tipo de dado boolean pode conter um de dois valores: true ou false. Quando você tem uma variável booleana, frequentemente precisa verificar seu valor para tomar decisões em seu programa.
A maneira mais comum de verificar se uma variável booleana é true é usando o operador de igualdade ==.
Vamos criar um programa Java simples para demonstrar isso.
Abra o arquivo
HelloJava.javano editor WebIDE, se ele ainda não estiver aberto.Substitua todo o conteúdo do arquivo pelo seguinte código:
public class HelloJava { public static void main(String[] args) { boolean isJavaFun = true; if (isJavaFun == true) { System.out.println("Java is fun!"); } else { System.out.println("Java is not fun."); } } }Vamos analisar as novas partes deste código:
boolean isJavaFun = true;: Esta linha declara uma variável booleana chamadaisJavaFune a inicializa com o valortrue.if (isJavaFun == true): Esta é uma instruçãoif. Ela verifica se a condição dentro dos parênteses étrue. A condiçãoisJavaFun == trueusa o operador de igualdade==para comparar o valor da variávelisJavaFuncom o literal booleanotrue.System.out.println("Java is fun!");: Esta linha será executada se a condiçãoisJavaFun == truefortrue.else: Esta palavra-chave introduz o bloco de código a ser executado se a condiçãoifforfalse.System.out.println("Java is not fun.");: Esta linha será executada se a condiçãoisJavaFun == trueforfalse.
Salve o arquivo (Ctrl+S ou Cmd+S).
Compile o programa usando o comando
javacno Terminal:javac HelloJava.javaSe não houver erros, um arquivo
HelloJava.classserá criado no diretório~/project.Execute o programa compilado usando o comando
java:java HelloJavaVocê deve ver a saída:
Java is fun!Isso confirma que a condição
ifisJavaFun == truefoi avaliada comotrue, e a mensagem correspondente foi impressa.
Embora usar == true seja perfeitamente válido e fácil de entender, em Java, você pode simplificar a verificação de true. Como a instrução if já avalia a expressão dentro dos parênteses como um booleano, você pode usar diretamente a própria variável booleana como a condição.
Vamos modificar o código para usar essa abordagem simplificada:
Abra
HelloJava.javanovamente no editor.Altere a instrução
ifpara:if (isJavaFun) { System.out.println("Java is fun!"); } else { System.out.println("Java is not fun."); }Observe que removemos
== true. A instruçãoif (isJavaFun)é equivalente aif (isJavaFun == true).Salve o arquivo.
Compile o programa modificado:
javac HelloJava.javaExecute o programa novamente:
java HelloJavaVocê obterá a mesma saída:
Java is fun!Isso demonstra que usar a variável booleana diretamente na condição
ifé uma maneira mais concisa e idiomática de verificar se ela étrue.
Em resumo, você pode usar o operador de igualdade == true para verificar se um booleano é verdadeiro, mas a maneira mais comum e limpa é simplesmente usar a própria variável booleana como a condição em uma instrução if.
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.javano 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 tipoBooleane atribuímos a ela a constanteBoolean.TRUE.if (isJavaFunObject == Boolean.TRUE): Usamos o operador de igualdade==para comparar nosso objetoBooleancom a constanteBoolean.TRUE. ComoisJavaFunObjectrecebeBoolean.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 primitivobooleantrueem um objetoBoolean.if (anotherBooleanObject == Boolean.TRUE): Novamente, usamos==para compararanotherBooleanObjectcomBoolean.TRUE. Devido à forma como o autoboxing funciona e ao cache de valoresBooleando Java, para os valorestrueefalse, os objetosBooleanautoboxed frequentemente se referem às mesmas instâncias em cache queBoolean.TRUEeBoolean.FALSE. Portanto, essa condição também provavelmente serátrue.
Salve o arquivo.
Compile o programa:
javac HelloJava.javaExecute o programa:
java HelloJavaVocê deve ver a saída:
Java is fun (using Boolean.TRUE)! Another boolean object is true!Isso confirma que usar
==comBoolean.TRUEfunciona como esperado nesses casos porque as variáveis provavelmente estão referenciando o mesmo objetoBoolean.TRUEsubjacente.
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.javano editor.Altere as instruções
ifpara 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.TRUEpor.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.javaExecute o programa:
java HelloJavaVocê 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 objetosBooleanpara 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.
Lidar com Booleanos Nulos
Na etapa anterior, aprendemos sobre a classe wrapper Boolean. Uma diferença fundamental entre o boolean primitivo e a classe wrapper Boolean é que uma variável Boolean pode conter o valor null, enquanto um boolean primitivo não pode. Lidar com valores null é crucial em Java para evitar erros NullPointerException.
Um NullPointerException ocorre quando você tenta usar uma variável que está atualmente apontando para null como se fosse um objeto válido. Por exemplo, chamar um método em um objeto null resultará em um NullPointerException.
Ao verificar se um objeto Boolean é true, você precisa ter cuidado se o objeto pode ser null.
Vamos ver o que acontece se tentarmos verificar um Boolean null usando os métodos que aprendemos até agora.
Abra o arquivo
HelloJava.javano editor WebIDE.Substitua o código pelo seguinte:
public class HelloJava { public static void main(String[] args) { Boolean nullableBoolean = null; // Attempting to use == with null if (nullableBoolean == true) { System.out.println("This won't be printed."); } else { System.out.println("Using == with null Boolean."); } // Attempting to use .equals() with null // This will cause a NullPointerException! // if (nullableBoolean.equals(Boolean.TRUE)) { // System.out.println("This will not be reached."); // } else { // System.out.println("This will not be reached either."); // } } }Neste código:
Boolean nullableBoolean = null;: Declaramos uma variávelBooleane a definimos explicitamente comonull.if (nullableBoolean == true): Usamos o operador de igualdade==para comparar oBooleannullcom o primitivotrue. Ao comparar um objetoBoolean(mesmo que sejanull) com umbooleanprimitivo, Java realiza "unboxing". Ele tenta converter o objetoBooleanem umbooleanprimitivo. Se o objetoBooleanfornull, esse processo de unboxing resulta em umNullPointerException.- A verificação
.equals()comentada também causaria umNullPointerExceptionporque você está tentando chamar o método.equals()em um objetonull(nullableBoolean).
Salve o arquivo.
Compile o programa:
javac HelloJava.javaExecute o programa:
java HelloJavaVocê verá uma mensagem de erro no terminal, indicando um
NullPointerException:Exception in thread "main" java.lang.NullPointerException at HelloJava.main(HelloJava.java:6)Isso mostra que comparar diretamente um
Booleanpotencialmentenullcom umbooleanprimitivo usando==ou chamar.equals()nele pode levar a umNullPointerException.
Para lidar com segurança com objetos Boolean potencialmente null, você sempre deve verificar se o objeto é null antes de tentar fazer unboxing ou chamar métodos nele.
Veja como você pode verificar com segurança se um objeto Boolean é true:
Abra
HelloJava.javano editor.Substitua o código pelo seguinte:
public class HelloJava { public static void main(String[] args) { Boolean nullableBoolean = null; Boolean trueBoolean = Boolean.TRUE; Boolean falseBoolean = Boolean.FALSE; // Safely check if nullableBoolean is true if (nullableBoolean != null && nullableBoolean == true) { System.out.println("nullableBoolean is true (safe check)."); } else { System.out.println("nullableBoolean is not true or is null (safe check)."); } // Safely check if trueBoolean is true if (trueBoolean != null && trueBoolean == true) { System.out.println("trueBoolean is true (safe check)."); } else { System.out.println("trueBoolean is not true or is null (safe check)."); } // Safely check if falseBoolean is true if (falseBoolean != null && falseBoolean == true) { System.out.println("falseBoolean is true (safe check)."); } else { System.out.println("falseBoolean is not true or is null (safe check)."); } // Alternative safe check using equals if (Boolean.TRUE.equals(nullableBoolean)) { System.out.println("nullableBoolean is true (safe equals check)."); } else { System.out.println("nullableBoolean is not true or is null (safe equals check)."); } if (Boolean.TRUE.equals(trueBoolean)) { System.out.println("trueBoolean is true (safe equals check)."); } else { System.out.println("trueBoolean is not true or is null (safe equals check)."); } } }Neste código atualizado:
if (nullableBoolean != null && nullableBoolean == true): Primeiro, verificamos senullableBooleannão énullusandonullableBoolean != null. O operador&&significa que a segunda parte da condição (nullableBoolean == true) só será avaliada se a primeira parte (nullableBoolean != null) fortrue. Isso impede oNullPointerException. SenullableBooleanfornull, a primeira parte éfalsee toda a condição éfalsesem avaliar a segunda parte.if (Boolean.TRUE.equals(nullableBoolean)): Esta é outra maneira segura de verificar se um objetoBooleanétrue, mesmo que sejanull. Ao chamar.equals()no objeto conhecido não nuloBoolean.TRUEe passar o objeto potencialmentenullnullableBooleancomo um argumento, evitamos oNullPointerException. O método.equals()foi projetado para lidar com argumentosnullcom elegância;Boolean.TRUE.equals(null)simplesmente retornaráfalse.
Salve o arquivo.
Compile o programa:
javac HelloJava.javaExecute o programa:
java HelloJavaVocê deve ver a saída:
nullableBoolean is not true or is null (safe check). trueBoolean is true (safe check). falseBoolean is not true or is null (safe check). nullableBoolean is not true or is null (safe equals check). trueBoolean is true (safe equals check).Isso demonstra como verificar com segurança o valor de um objeto
Boolean, mesmo quando ele pode sernull, usando a verificação!= nullcombinada com== truee o métodoBoolean.TRUE.equals().
Lembre-se sempre de considerar a possibilidade de null ao trabalhar com objetos Boolean para evitar erros de tempo de execução.
Resumo
Neste laboratório, aprendemos como verificar se uma variável booleana é true em Java. Começamos usando o operador de igualdade == para comparar uma variável booleana diretamente com o literal booleano true. Este é o método mais comum e direto para verificar o valor de um booleano primitivo.
Também exploramos como lidar com objetos wrapper Boolean, que podem ser null. Aprendemos que comparar diretamente um objeto Boolean com true usando == pode não funcionar como esperado devido à identidade do objeto. Em vez disso, devemos usar o método equals() ou fazer unboxing do objeto Boolean para seu valor booleano primitivo antes da comparação. Finalmente, abordamos a importância de lidar com potenciais NullPointerException ao trabalhar com objetos Boolean anuláveis, verificando se há null antes de tentar acessar seu valor.



