HOWTO · Java
Usar operadores AND y OR en Java
Use && y || de Java para combinar condiciones booleanas y comprenda la evaluación de cortocircuito.
En esta página
Use && cuando todas las condiciones deben ser verdaderas y || cuando basta una. Ambos hacen evaluación de cortocircuito: Java evalúa la parte derecha solo si todavía puede cambiar el resultado. Por eso text != null && !text.isEmpty() no llama a isEmpty() cuando text es null.
! invierte una condición. Java exige operandos boolean o Boolean; no convierte automáticamente números ni cadenas en valores verdaderos. La especificación de Java define este comportamiento.
Elegir &&, || o !
&& es verdadero solo si ambos operandos lo son; || lo es si uno lo es. Este programa fue compilado y ejecutado en Polyglot con 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
Use && para un intervalo, porque deben cumplirse ambos límites, y || para una alternativa como isAdmin || hasTemporaryPass. Use paréntesis cuando una expresión mezclada no sea clara.
Comprobar primero null
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
La condición falsa de la izquierda evita la desreferencia con &&. En cambio, & evalúa ambos lados y produce la excepción mostrada. Scanner.nextLine() no devuelve null; este patrón sirve para resultados, configuración o campos que sí pueden ser nulos.
Lo que el cortocircuito no protege
Solo se omite el lado derecho cuando el izquierdo ya decide el resultado. Un Boolean enabled = null necesita enabled != null && enabled; enabled && otherCondition puede lanzar NullPointerException al desempaquetarlo. No coloque trabajo obligatorio en un lado que se pueda omitir.
No sustituir && por &
& y | admiten booleanos, pero siempre evalúan ambos lados y también son operadores bit a bit para enteros. Use && y || para guardas habituales. Evite efectos secundarios como index++ dentro de una condición: el cortocircuito puede omitirlos.