HOWTO · Java

Usare gli operatori AND e OR in Java

Usa && e || di Java per combinare condizioni booleane, capire il cortocircuito e non confonderli con & e |.

In questa pagina

Usa && quando tutte le condizioni devono essere vere e || quando ne basta una. Entrambi applicano il cortocircuito: Java valuta la parte destra solo se può ancora cambiare il risultato. Perciò text != null && !text.isEmpty() non chiama isEmpty() quando text è null.

! inverte una condizione booleana. Java richiede boolean o Boolean, senza convertire automaticamente numeri o stringhe. La specifica Java definisce le regole.

Scegliere &&, || e !

&& è vero solo se entrambi gli operandi sono veri; || è vero se almeno uno lo è. Il programma è stato compilato ed eseguito in 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

Controllare prima 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

Con && la condizione falsa a sinistra evita il dereferenziamento. & invece valuta entrambi i lati e genera l’eccezione mostrata. Scanner.nextLine() non restituisce null; questa guardia serve per risultati, campi o configurazioni nullable.

Ciò che il cortocircuito non protegge

Il salta il lato destro soltanto quando il sinistro decide già il risultato. Un Boolean enabled = null richiede enabled != null && enabled; enabled && otherCondition può generare NullPointerException durante l’unboxing. Non mettere lavoro obbligatorio in un lato che può essere saltato.

Non sostituire && con &

& e | accettano booleani ma valutano sempre entrambi i lati; inoltre sono operatori bitwise per gli interi. Usa && e || per le guardie normali ed evita effetti collaterali come index++, perché il cortocircuito può saltarli.