Restituiscono true o false a seconda della condizione.
| Operatore | Descrizione | Esempio (a = 10, b = 5) |
|---|---|---|
== | Uguale | a == b // false |
!= | Diverso | a != b // true |
> | Maggiore | a > b // true |
< | Minore | a < b // false |
>= | Maggiore o uguale | a >= b // true |
<= | Minore o uguale | a <= b // false |
RIFERIMENTO VS CONTENUTO
La differenza tra equals() e == in Java è fondamentale, perché hanno scopi diversi:
Confronto di riferimento (==)
Funziona sia su oggetti che su tipi primitivi, ma nei primitivi confronta il valore, mentre negli oggetti confronta l’indirizzo in memoria.
String a = new String("Java");
String b = new String("Java");
System.out.println(a == b); // false, due oggetti diversiQui a e b contengono lo stesso testo, ma sono due oggetti distinti.
int x = 5;
int y = 5;
System.out.println(x == y); // true, confronta i valoriConfronto basato sul valore.
Confronto di contenuto (equals())
Il metodo equals() serve a confrontare il contenuto logico di due oggetti. È definito in Object, ma molte classi lo sovrascrivono per confrontare i propri campi invece dei riferimenti.
Esempio con String:
String a = new String("Java");
String b = new String("Java");
System.out.println(a.equals(b)); // true: stesso contenutoQui equals() confronta i caratteri della stringa, non l’indirizzo in memoria.
Esempio con una classe personalizzata:
Per impostazione predefinita, una classe che non sovrascrive equals() eredita quello di Object, che confronta solo i riferimenti.
class Punto {
int x, y;
Punto(int x, int y){ this.x = x; this.y = y; }
}
Punto p1 = new Punto(1,2);
Punto p2 = new Punto(1,2);
System.out.println(p1 == p2); // false: oggetti diversi
System.out.println(p1.equals(p2)); // false: ereditato → confronto riferimentiSe vogliamo che due punti siano considerati uguali quando hanno le stesse coordinate, dobbiamo ridefinire equals():
class Punto {
int x, y;
Punto(int x, int y){ this.x = x; this.y = y; }
@Override
public boolean equals(Object o){
if (o instanceof Punto p) {
return this.x == p.x && this.y == p.y;
}
return false;
}
}
Punto p1 = new Punto(1,2);
Punto p2 = new Punto(1,2);
System.out.println(p1 == p2); // false: oggetti diversi
System.out.println(p1.equals(p2)); // true: sovrascritto → stesso contenuto