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.