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.