Os operadores lógicos são utilizados para combinar expressões booleanas e criar condições mais complexas. Os dois principais operadores lógicos em Java são o AND (&&) e o OR (||).
O operador lógico retorna um booleano (true ou false), assim como o operador relacional.
Para entender completamente como funcionam os operadores lógicos, é importante conhecer suas tabelas de verdade:
| A | B | A && B |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
| A | B | A || B |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
Dica: Para lembrar facilmente:
Vamos ver exemplos práticos de uso dos operadores lógicos em situações do mundo real:
Aprovação escolar (AND) e autorização de viagem (OR)
Para aprovação escolar, as duas condições colocadas devem ser verdadeiras.
Para autorização de viagem, basta que uma das condições seja verdadeira.
false, o resultado já será false independentemente do segundo operando, então o segundo operando não é avaliado.true, o resultado já será true independentemente do segundo operando, então o segundo operando não é avaliado.
public class operadoresLogicos {
public static void main(String[] args) {
// Exemplo 1: Aprovação escolar. Precisa ser verdadeira ambas as condições para ser aprovado
boolean notaAprovada = true;
boolean frequenciaSuficiente = true;
boolean alunoAprovado = (notaAprovada && frequenciaSuficiente);
System.out.println("O aluno foi aprovado? " + alunoAprovado);
notaAprovada = false;
alunoAprovado = (notaAprovada && frequenciaSuficiente);
System.out.println("O aluno foi aprovado? " + alunoAprovado);
// Exemplo2: Autorização de viagem. Precisa de apenas uma condição verdadeira.
boolean temAutorizacaoDoPai = true;
boolean temAutorizacaoDaMae = false;
boolean podeViajar = (temAutorizacaoDaMae || temAutorizacaoDoPai);
System.out.println("O menor pode viajar? " + podeViajar);
}
}
O aluno foi aprovado? true
O aluno foi aprovado? false
O menor pode viajar? true
O ! inverte o resultado lógico. O true vira false e o false vira true.
Usado quando o significado da variável pede que seja não-verdadeirou ou não-falso.
public class PodeDirigir {
public static void main(String[] args) {
boolean temCarteira = true;
System.out.println("Tem carteira? " + temCarteira);
boolean estaDescansado = true;
System.out.println("Esta descansado? " + estaDescansado);
boolean bebeuAlcool = false;
System.out.println("Bebeu alcool? " + bebeuAlcool);
// A importância do !
boolean bebeuAlcool2 = !bebeuAlcool;
System.out.println("Nao bebeu alcool? " + bebeuAlcool2);
// bebeuAlcool sem o not (!)
boolean podeDirigir = (temCarteira && estaDescansado && bebeuAlcool);
System.out.println("Pode dirigir? " + podeDirigir);
// bebeuAlcool com o not (!)
System.out.println("A importancia do !");
podeDirigir = (temCarteira && estaDescansado && !bebeuAlcool);
System.out.println("Pode dirigir? " + podeDirigir);
}
}
Tem carteira? true
Esta descansado? true
Bebeu alcool? false
Nao bebeu alcool? true
Pode dirigir? false
A importancia do !
Pode dirigir? true
public class AplicacoesPraticas {
public static void main(String[] args) {
// Exemplo: Sistema de verificação de elegibilidade para empréstimo bancário
int idade = 25;
double salario = 3000.0;
int tempoEmprego = 2; // anos
boolean bomHistoricoCredito = true;
// Verificando se a pessoa é elegível para empréstimo
// Critérios: idade >= 21 E (salário > 2000 OU tempo de emprego >= 3) E bom histórico de crédito
boolean elegivel = (idade >= 21) && (salario > 2000 || tempoEmprego >= 3) && bomHistoricoCredito;
System.out.println("Dados do cliente:");
System.out.println("Idade: " + idade);
System.out.println("Salário: R$" + salario);
System.out.println("Tempo de emprego: " + tempoEmprego + " anos");
System.out.println("Bom histórico de crédito: " + bomHistoricoCredito);
System.out.println("Elegível para empréstimo: " + elegivel);
// Verificando cada condição separadamente para depuração
boolean condicaoIdade = idade >= 21;
boolean condicaoFinanceira = salario > 2000 || tempoEmprego >= 3;
System.out.println("\nAnálise detalhada:");
System.out.println("Condição de idade (>= 21): " + condicaoIdade);
System.out.println("Condição financeira (salário > 2000 OU tempo de emprego >= 3): " + condicaoFinanceira);
System.out.println("Condição de crédito: " + bomHistoricoCredito);
// Exemplo: Sistema de verificação para acesso a área restrita
boolean temCartaoAcesso = true;
boolean estaEmHorarioPermitido = false;
boolean ehFuncionario = true;
boolean ehVisitanteAutorizado = false;
// Verificando se pode acessar
// Critérios: deve ter cartão de acesso E
// (estar em horário permitido OU ser funcionário OU ser visitante autorizado)
boolean podeAcessar = temCartaoAcesso && (estaEmHorarioPermitido || ehFuncionario || ehVisitanteAutorizado);
System.out.println("\nVerificação de acesso:");
System.out.println("Tem cartão de acesso: " + temCartaoAcesso);
System.out.println("Está em horário permitido: " + estaEmHorarioPermitido);
System.out.println("É funcionário: " + ehFuncionario);
System.out.println("É visitante autorizado: " + ehVisitanteAutorizado);
System.out.println("Pode acessar área restrita: " + podeAcessar);
}
}
Dados do cliente:
Idade: 25
Salário: R$3000.0
Tempo de emprego: 2 anos
Bom histórico de crédito: true
Elegível para empréstimo: true
Análise detalhada:
Condição de idade (>= 21): true
Condição financeira (salário > 2000 OU tempo de emprego >= 3): true
Condição de crédito: true
Verificação de acesso:
Tem cartão de acesso: true
Está em horário permitido: false
É funcionário: true
É visitante autorizado: false
Pode acessar área restrita: true
Teste seus conhecimentos sobre operadores lógicos em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: