Operatori relazionali in Java
Gli operatori relazionali in Java sono quegli operatori che confrontano due valori e restituiscono un risultato booleano, cioè `true` (vero) o `false` (falso) a seconda dell'esito del confronto.
In Java, gli operatori relazionali principali sono:
| Operatore | Descrizione | Esempio |
|---|---|---|
| == | Uguale a | a == b |
| != | Diverso da | a != b |
| > | Maggiore di | a > b |
| < | Minore di | a < b |
| >= | Maggiore o uguale a | a >= b |
| <= | Minore o uguale a | a <= b |
Gli operatori relazionali sono strumenti essenziali per prendere decisioni nei tuoi programmi tramite le strutture condizionali, perché confrontano valori e ti permettono di controllare il flusso del codice in base alle condizioni che definisci.
Vediamoli uno a uno facendo degli esempi pratici per capire meglio come funzionano.
L'operatore uguale a (==)
Immagina di essere in un negozio e vuoi decidere se acquistare qualcosa in base al prezzo.
Hai un budget fisso e vuoi verificare se un articolo costa esattamente quanto sei disposto a pagare. Potresti scrivere:
int prezzoArticolo = 50;
int budget = 50;
if (prezzoArticolo == budget) {
System.out.println("L'articolo ha esattamente il prezzo che puoi permetterti!");
}
L'articolo ha esattamente il prezzo che puoi permetterti!
In questo caso, l'operatore `==` confronta i due valori, `prezzoArticolo` e `budget`.
Se sono uguali, la condizione è vera e verrà stampata la frase: "L'articolo ha esattamente il prezzo che puoi permetterti!"
L'operatore diverso da (!=)
E se volessi comprare solo un articolo che non costi esattamente 50 euro? Puoi usare l'operatore `!=`, che significa "diverso da":
int prezzoArticolo = 50;
int budget = 20;
if (prezzoArticolo != budget) {
System.out.println("L'articolo ha un prezzo diverso da quello che hai stabilito.");
}
L'articolo ha un prezzo diverso da quello che hai stabilito.
Qui, `!=` verifica se `prezzoArticolo` è diverso da `budget`. Se è così, la condizione è vera.
L'operatore maggiore di (>)
Supponiamo tu voglia sapere se un articolo è troppo costoso per te:
int prezzoArticolo = 50;
int budget = 20;
if (prezzoArticolo > budget) {
System.out.println("L'articolo è troppo costoso!");
}
L'articolo è troppo costoso!
L'operatore `>` verifica se `prezzoArticolo` è maggiore del `budget`. In questo caso, se il prezzo supera il budget, la condizione diventa vera.
L'operatore minore di (<)
In maniera simile, puoi verificare se il prezzo dell'articolo è inferiore al tuo budget:
int prezzoArticolo = 50;
int budget = 100;
if (prezzoArticolo < budget) {
System.out.println("Puoi permetterti l'articolo!");
}
Puoi permetterti l'articolo!
L'operatore `<` controlla se `prezzoArticolo` è minore del `budget`. Se è vero, potrai permettertelo!
Gli operatori `>=` e `<=`
Questi operatori sono delle combinazioni: verificano se un valore è maggiore o uguale (`>=`) o minore o uguale (`<=`) a un altro. Sono utili quando vuoi includere anche il caso in cui i due valori siano uguali.
Ad esempio, se vuoi comprare l'articolo solo se il prezzo è minore o uguale al tuo budget:
int prezzoArticolo = 50;
int budget = 50;
if (prezzoArticolo <= budget) {
System.out.println("L'articolo è accessibile o esattamente al limite del tuo budget.");
}
L'articolo è accessibile o esattamente al limite del tuo budget.
In questo caso i due valori sono uguali, quindi il confronto è soddisfatto.
Fai attenzione quando confronti gli oggetti. Gli operatori relazionali come `==` e `!=` funzionano bene con i tipi primitivi (come `int`, `double`, ecc.), ma non altrettanto quando lavori con gli oggetti.
Quando confronti due oggetti in Java, usare `==` non è l’approccio corretto perché questo operatore verifica se gli oggetti hanno lo stesso riferimento di memoria, non se il contenuto è lo stesso.
Esempio 1
Ad esempio, confronta due variabili che puntano alla stessa stringa 'Tom'.
String nome1 = "Tom";
String nome2 = "Tom";
if (nome1==nome2) {
System.out.println("I nomi sono uguali!");
} else {
System.out.println("I nomi NON sono uguali!");
}
I nomi sono uguali!
In questo caso stai creando letterali di stringa.
In Java, le stringhe letterali sono gestite tramite lo String Pool. Si tratta di un'area di memoria speciale che Java usa per memorizzare le stringhe. Per ottimizzare lo spazio, se due variabili hanno la stessa stringa letterale, puntano allo stesso indirizzo di memoria.
Quando crei una stringa letterale, Java controlla se la stessa stringa è già presente nel pool. Se sì, riutilizza il riferimento esistente invece di crearne uno nuovo.
Quindi, il risultato è positivo perché il riferimento di memoria è lo stesso.
Esempio 2
Ora crea due oggetti distinti che hanno lo stesso valore di stringa.
String nome1 = new String("Tom");
String nome2 = new String("Tom");
if (nome1==nome2) {
System.out.println("I nomi sono uguali!");
} else {
System.out.println("I nomi NON sono uguali!");
}
I nomi NON sono uguali!
In questo caso i due oggetti hanno un riferimento diverso perché si trovano in due aree distinte della memoria.
Pertanto, Java risponde che non sono uguali.
Esempio 3
Se vuoi confrontare il contenuto di due stringhe, quando lavori con gli oggetti devi usare il metodo `.equals()`:
String nome1 = new String("Tom");
String nome2 = new String("Tom");
if (nome1.equals(nome2)) {
System.out.println("I nomi sono uguali!");
} else {
System.out.println("I nomi NON sono uguali!");
}
I nomi sono uguali!