HOWTO · Java
Usar operadores AND e OR em Java
Use && e || do Java para combinar condições booleanas, entender o curto-circuito e não confundi-los com & e |.
Nesta página
Use && quando todas as condições precisam ser verdadeiras e || quando uma basta. Ambos fazem curto-circuito: Java avalia o lado direito apenas se ele ainda puder mudar o resultado. Assim, text != null && !text.isEmpty() não chama isEmpty() quando text é null.
! inverte uma condição booleana. Java exige boolean ou Boolean; números e strings não são convertidos implicitamente. A especificação Java define as regras.
Escolher &&, || e !
&& só é verdadeiro se ambos os operandos forem verdadeiros; || é verdadeiro se um deles for verdadeiro. Este programa foi compilado e executado no Polyglot com OpenJDK 11.0.32.
public class LogicalOperators {
public static void main(String[] args) {
boolean hasTicket = true;
boolean isMember = false;
System.out.println("ticket && member: " + (hasTicket && isMember));
System.out.println("ticket || member: " + (hasTicket || isMember));
System.out.println("!member: " + !isMember);
int age = 20;
boolean canEnter = age >= 18 && age <= 65;
System.out.println("can enter: " + canEnter);
}
}
ticket && member: false
ticket || member: true
!member: true
can enter: true
Verificar null primeiro
public class ShortCircuitBoundary {
public static void main(String[] args) {
String text = null;
boolean safe = text != null && !text.isEmpty();
System.out.println("&& with null: " + safe);
try {
boolean unsafe = text != null & !text.isEmpty();
System.out.println("& with null: " + unsafe);
} catch (NullPointerException exception) {
System.out.println("& with null: NullPointerException");
}
}
}
&& with null: false
& with null: NullPointerException
Com &&, a condição falsa à esquerda evita o acesso à direita. & avalia os dois lados e produz a exceção mostrada. Scanner.nextLine() não retorna null; essa guarda serve para retornos, campos e configurações que podem ser nulos.
O que o curto-circuito não protege
Ele só pula o lado direito quando o esquerdo já decide o resultado. Um Boolean enabled = null precisa de enabled != null && enabled; enabled && otherCondition pode lançar NullPointerException no unboxing. Não coloque trabalho obrigatório em um lado que pode ser ignorado.
Não trocar && por &
& e | aceitam booleanos, mas sempre avaliam ambos os lados e também são operadores bit a bit para inteiros. Use && e || em guardas normais e evite efeitos colaterais, como index++, dentro da condição.