O operador NOT (!) inverte o valor booleano de uma variável. Pense nele como um interruptor que muda um valor para seu oposto. É como dizer "não é verdadeiro" ou "não é falso".
O operador NOT (!) é um operador unário que:
true se torna false e false se torna trueAqui está a tabela de verdade para o operador NOT:
| A | !A |
|---|---|
| true | false |
| false | true |
Como você pode ver, o operador NOT simplesmente inverte o valor booleano.
Vamos ver como o operador NOT funciona na prática:
public class OperadorNot {
public static void main(String[] args) {
// Valores booleanos básicos
boolean verdadeiro = true;
boolean falso = false;
// Aplicando o operador NOT
boolean naoVerdadeiro = !verdadeiro;
boolean naoFalso = !falso;
// Exibindo resultados
System.out.println("verdadeiro = " + verdadeiro);
System.out.println("!verdadeiro = " + naoVerdadeiro);
System.out.println("falso = " + falso);
System.out.println("!falso = " + naoFalso);
// Aplicando o operador NOT duas vezes
boolean naoNaoVerdadeiro = !(!verdadeiro);
System.out.println("\nAplicando o NOT duas vezes:");
System.out.println("!(!verdadeiro) = " + naoNaoVerdadeiro);
// Usando o operador NOT em expressões relacionais
int a = 5;
int b = 10;
boolean aMaiorQueB = a > b;
boolean aNaoMaiorQueB = !(a > b);
System.out.println("\nUsando NOT com expressões relacionais:");
System.out.println("a > b: " + aMaiorQueB);
System.out.println("!(a > b): " + aNaoMaiorQueB);
// Equivalência lógica
System.out.println("\nEquivalência lógica:");
System.out.println("!(a > b) é equivalente a a <= b? " + (!(a > b) == (a <= b)));
}
}
verdadeiro = true
!verdadeiro = false
falso = false
!falso = true
Aplicando o NOT duas vezes:
!(!verdadeiro) = true
Usando NOT com expressões relacionais:
a > b: false
!(a > b): true
Equivalência lógica:
!(a > b) é equivalente a a <= b? true
O operador NOT é fundamental para controlar o fluxo de lógica em programas. Vamos ver alguns exemplos da sua importância:
public class ImportanciaOperadorNot {
public static void main(String[] args) {
// Exemplo 1: Verificando se um número não é par
int numero = 7;
boolean ehPar = numero % 2 == 0;
boolean naoEhPar = !ehPar; // Ou diretamente: boolean naoEhPar = !(numero % 2 == 0);
System.out.println("Número: " + numero);
System.out.println("É par? " + ehPar);
System.out.println("Não é par? " + naoEhPar);
// Exemplo 2: Verificando se uma pessoa não é elegível
int idade = 16;
boolean ehMaiorDeIdade = idade >= 18;
boolean ehMenorDeIdade = !ehMaiorDeIdade;
System.out.println("\nIdade: " + idade);
System.out.println("É maior de idade? " + ehMaiorDeIdade);
System.out.println("É menor de idade? " + ehMenorDeIdade);
// Exemplo 3: Invertendo a lógica de uma condição complexa
boolean temCarteira = false;
boolean temAutorizacao = true;
// Verificando se pode dirigir
boolean podeDirigir = temCarteira && temAutorizacao;
// Verificando se não pode dirigir (inverso da condição anterior)
boolean naoPodeDirigir = !podeDirigir; // Ou diretamente: boolean naoPodeDirigir = !(temCarteira && temAutorizacao);
System.out.println("\nTem carteira? " + temCarteira);
System.out.println("Tem autorização? " + temAutorizacao);
System.out.println("Pode dirigir? " + podeDirigir);
System.out.println("Não pode dirigir? " + naoPodeDirigir);
}
}
Número: 7
É par? false
Não é par? true
Idade: 16
É maior de idade? false
É menor de idade? true
Tem carteira? false
Tem autorização? true
Pode dirigir? false
Não pode dirigir? true
Vamos ver um exemplo mais elaborado do uso do operador NOT em um sistema de controle de acesso:
public class SistemaAcesso {
public static void main(String[] args) {
// Dados do usuário
boolean usuarioLogado = true;
boolean contaAtiva = true;
boolean ehAdmin = false;
boolean emModoManutencao = true;
// Verificando acesso a funcionalidades comuns
// Usuário precisa estar logado E com conta ativa
boolean temAcessoBasico = usuarioLogado && contaAtiva;
// Verificando acesso a área administrativa
// Precisa ter acesso básico E ser administrador
boolean temAcessoAdmin = temAcessoBasico && ehAdmin;
// Verificando acesso durante manutenção
// Durante a manutenção, apenas administradores podem acessar
boolean podeAcessarDuranteManutencao = !emModoManutencao || ehAdmin;
// Verificando acesso final (combinando todas as regras)
boolean temAcessoAgora = temAcessoBasico && podeAcessarDuranteManutencao;
// Exibindo resultados
System.out.println("Dados do usuário:");
System.out.println("Usuário logado: " + usuarioLogado);
System.out.println("Conta ativa: " + contaAtiva);
System.out.println("É administrador: " + ehAdmin);
System.out.println("Sistema em manutenção: " + emModoManutencao);
System.out.println("\nVerificações de acesso:");
System.out.println("Tem acesso básico: " + temAcessoBasico);
System.out.println("Tem acesso administrativo: " + temAcessoAdmin);
System.out.println("Pode acessar durante manutenção: " + podeAcessarDuranteManutencao);
System.out.println("Tem acesso ao sistema agora: " + temAcessoAgora);
// E se o usuário fosse administrador?
ehAdmin = true;
temAcessoAdmin = temAcessoBasico && ehAdmin;
podeAcessarDuranteManutencao = !emModoManutencao || ehAdmin;
temAcessoAgora = temAcessoBasico && podeAcessarDuranteManutencao;
System.out.println("\nE se o usuário fosse administrador:");
System.out.println("É administrador: " + ehAdmin);
System.out.println("Tem acesso administrativo: " + temAcessoAdmin);
System.out.println("Pode acessar durante manutenção: " + podeAcessarDuranteManutencao);
System.out.println("Tem acesso ao sistema agora: " + temAcessoAgora);
}
}
Dados do usuário:
Usuário logado: true
Conta ativa: true
É administrador: false
Sistema em manutenção: true
Verificações de acesso:
Tem acesso básico: true
Tem acesso administrativo: false
Pode acessar durante manutenção: false
Tem acesso ao sistema agora: false
E se o usuário fosse administrador:
É administrador: true
Tem acesso administrativo: true
Pode acessar durante manutenção: true
Tem acesso ao sistema agora: true
Vamos aplicar o operador NOT em um exemplo mais prático, como um sistema de verificação de elegibilidade para um programa:
public class VerificacaoElegibilidade {
public static void main(String[] args) {
// Critérios de elegibilidade para um programa de bolsa de estudos
int idade = 19;
double rendaFamiliar = 3000.0;
boolean temOutraBolsa = false;
boolean temEmprego = true;
// Definindo as regras de elegibilidade
// 1. Precisa ter entre 18 e 25 anos
boolean idadeCorreta = idade >= 18 && idade <= 25;
// 2. Renda familiar deve ser menor que 4000
boolean rendaElegivel = rendaFamiliar < 4000.0;
// 3. Não pode ter outra bolsa
boolean semOutraBolsa = !temOutraBolsa;
// 4. Não pode ter emprego
boolean semEmprego = !temEmprego;
// Verificação final: todas as condições devem ser atendidas
boolean elegivel = idadeCorreta && rendaElegivel && semOutraBolsa && semEmprego;
// Exibindo resultados
System.out.println("Verificação de Elegibilidade para Bolsa de Estudos");
System.out.println("---------------------------------------------------");
System.out.println("Dados do candidato:");
System.out.println("Idade: " + idade);
System.out.println("Renda familiar: R$" + rendaFamiliar);
System.out.println("Tem outra bolsa: " + temOutraBolsa);
System.out.println("Tem emprego: " + temEmprego);
System.out.println("\nVerificação dos critérios:");
System.out.println("1. Idade entre 18 e 25: " + idadeCorreta);
System.out.println("2. Renda familiar < R$4000: " + rendaElegivel);
System.out.println("3. Não tem outra bolsa: " + semOutraBolsa);
System.out.println("4. Não tem emprego: " + semEmprego);
System.out.println("\nResultado final:");
System.out.println("Candidato elegível para a bolsa: " + elegivel);
// Identificando os motivos da não elegibilidade
if (!elegivel) {
System.out.println("\nMotivos da não elegibilidade:");
if (!idadeCorreta) {
System.out.println("- Idade fora da faixa permitida (18-25 anos)");
}
if (!rendaElegivel) {
System.out.println("- Renda familiar acima do limite de R$4000");
}
if (!semOutraBolsa) {
System.out.println("- Já possui outra bolsa");
}
if (!semEmprego) {
System.out.println("- Possui emprego");
}
}
}
}
Observação: Note como o operador NOT (!) é utilizado para verificar condições negativas (não ter outra bolsa, não ter emprego) e como é utilizado novamente nas verificações condicionais (if (!elegivel)) para identificar os motivos da não elegibilidade.
Teste seus conhecimentos sobre o operador NOT em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: