Gli operatori logici in Java
Gli operatori logici in Java sono i seguenti:
&& | AND logico | A&&B |
|| | OR logico | A||B |
^ | XOR | A^B |
! | NOT logico | A! |
& | AND (bitwise) | A&B |
| | OR (bitwise) | A|B |
A?B:C | if A then B else C | A?B:C |
Esempi pratici
Esempio 1
Se le espressioni A e B sono vere ( AND ), il programma scrive "ok" sullo schermo
if (A&&B) System.out.println(" ok " );
Esempio 2
Se almeno una espressione tra A e B è vera ( OR ), il programma scrive "ok" sullo schermo.
if (A||B) System.out.println(" ok " );
Esempio 3
Se l'espressione (A==B) è falsa, l'operatore NOT (!) la ribalta facendola diventare vera e il programma scrive "ok" sullo schermo.
if (!(A==B)) System.out.println(" ok " );
Esempio 4
Se le variabili A e B sono diverse ( XOR ) il programma scrive "ok" sullo schermo.
if (A^B) System.out.println(" ok " );
La differenza tra & e &&
Gli operatori logici & e && sono l'operatore AND. Quindi restituiscono lo stesso risultato.
Tuttavia, c'è una differenza molto importante, & è bitwise mentre && è short-circuit.
Operatori bitwise
L'operatore AND (&) verifica tutte le condizioni, anche dopo averne trovata una falsa.
A & B
Se A è falsa, l'operatore & verifica comunque se B è vera.
Nota. Gli operatori bitwise sono utili eseguire le operazioni sui bit.
Operatori short-circuit
L'operatore AND con valutazione (&&) non verifica tutte le condizioni, se almeno una è falsa.
A && B
In questo caso, se A è falsa, l'operatore && non verifica se B è vera.
Un esempio pratico
Se le espressioni (B!=0) e (A/B>0) sono vere, il programma scrive "ok" sullo schermo.
if (( B != 0 ) && ( A/B > 0 )) System.out.println(" ok " );
Se la prima espressione (B!=0) è falsa, il programma non verifica la seconda espressione (A/B>0).
E questo evita un messaggio di errore, essendo A/B una divisione per zero se B=0.
Viceversa, utilizzando l'operatore AND (&) bitwise
if (( B != 0 ) & ( A/B > 0 )) System.out.println(" ok " );
Se la prima espressione (B!=0) è falsa, il programma verifica anche la seconda espressione (A/B>0).
Gli operatori ? e : in Java
Gli operatori ? e : in Java mi consentono di scrivere un'istruzione condizionata (if) in forma più abbreviata.
espressione ? valore1 : valore2
Se l'espressione condizionale è vera, il programma usa il valore1 ( then ).
Viceversa, se l'espressione è falsa usa il valore2 ( else )
Attenzione. Questa forma abbreviata della IF funziona soltanto per assegnare un valore a una variabile. Non può essere usata per eseguire istruzioni o blocchi di istruzioni.
Un esempio pratico
In questo programma verifico qual è il valore massimo delle variabili A e B.
Le confronto e assegno il valore maggiore alla variabile MAX.
if (A > B) {
MAX = A;
}
ELSE {
MAX = B;
}
Con gli operatori logici posso scrivere la stessa istruzione in forma più abbreviata.
MAX = (A > B) ? A : B;
Il risultato è sempre lo stesso.
E così via