Como Verificar se uma Variável Booleana é Verdadeira em Java

JavaBeginner
Pratique Agora

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.

  1. Abra o arquivo HelloJava.java no editor WebIDE, se ele ainda não estiver aberto.

  2. 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 chamada isJavaFun e a inicializa com o valor true.
    • if (isJavaFun == true): Esta é uma instrução if. Ela verifica se a condição dentro dos parênteses é true. A condição isJavaFun == true usa o operador de igualdade == para comparar o valor da variável isJavaFun com o literal booleano true.
    • System.out.println("Java is fun!");: Esta linha será executada se a condição isJavaFun == true for true.
    • else: Esta palavra-chave introduz o bloco de código a ser executado se a condição if for false.
    • System.out.println("Java is not fun.");: Esta linha será executada se a condição isJavaFun == true for false.
  3. Salve o arquivo (Ctrl+S ou Cmd+S).

  4. Compile o programa usando o comando javac no Terminal:

    javac HelloJava.java

    Se não houver erros, um arquivo HelloJava.class será criado no diretório ~/project.

  5. Execute o programa compilado usando o comando java:

    java HelloJava

    Você deve ver a saída:

    Java is fun!

    Isso confirma que a condição if isJavaFun == true foi avaliada como true, 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:

  1. Abra HelloJava.java novamente no editor.

  2. Altere a instrução if para:

    if (isJavaFun) {
        System.out.println("Java is fun!");
    } else {
        System.out.println("Java is not fun.");
    }

    Observe que removemos == true. A instrução if (isJavaFun) é equivalente a if (isJavaFun == true).

  3. Salve o arquivo.

  4. Compile o programa modificado:

    javac HelloJava.java
  5. Execute o programa novamente:

    java HelloJava

    Você 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.

  1. Abra o arquivo HelloJava.java no editor WebIDE.

  2. 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.
  3. Salve o arquivo.

  4. Compile o programa:

    javac HelloJava.java
  5. 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().

  1. Abra HelloJava.java no editor.

  2. 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.

  3. Salve o arquivo.

  4. Compile o programa:

    javac HelloJava.java
  5. 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.

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.

  1. Abra o arquivo HelloJava.java no editor WebIDE.

  2. 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ável Boolean e a definimos explicitamente como null.
    • if (nullableBoolean == true): Usamos o operador de igualdade == para comparar o Boolean null com o primitivo true. Ao comparar um objeto Boolean (mesmo que seja null) com um boolean primitivo, Java realiza "unboxing". Ele tenta converter o objeto Boolean em um boolean primitivo. Se o objeto Boolean for null, esse processo de unboxing resulta em um NullPointerException.
    • A verificação .equals() comentada também causaria um NullPointerException porque você está tentando chamar o método .equals() em um objeto null (nullableBoolean).
  3. Salve o arquivo.

  4. Compile o programa:

    javac HelloJava.java
  5. Execute o programa:

    java HelloJava

    Você 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 Boolean potencialmente null com um boolean primitivo usando == ou chamar .equals() nele pode levar a um NullPointerException.

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:

  1. Abra HelloJava.java no editor.

  2. 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 se nullableBoolean não é null usando nullableBoolean != null. O operador && significa que a segunda parte da condição (nullableBoolean == true) só será avaliada se a primeira parte (nullableBoolean != null) for true. Isso impede o NullPointerException. Se nullableBoolean for null, a primeira parte é false e toda a condição é false sem avaliar a segunda parte.
    • if (Boolean.TRUE.equals(nullableBoolean)): Esta é outra maneira segura de verificar se um objeto Boolean é true, mesmo que seja null. Ao chamar .equals() no objeto conhecido não nulo Boolean.TRUE e passar o objeto potencialmente null nullableBoolean como um argumento, evitamos o NullPointerException. O método .equals() foi projetado para lidar com argumentos null com elegância; Boolean.TRUE.equals(null) simplesmente retornará false.
  3. Salve o arquivo.

  4. Compile o programa:

    javac HelloJava.java
  5. Execute o programa:

    java HelloJava

    Você 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 ser null, usando a verificação != null combinada com == true e o método Boolean.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.