Restituiscono true o false a seconda della condizione.

OperatoreDescrizioneEsempio (a = 10, b = 5)
==Ugualea == b // false
!=Diversoa != b // true
>Maggiorea > b // true
<Minorea < b // false
>=Maggiore o ugualea >= b // true
<=Minore o ugualea <= 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 diversi

Qui 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 valori

Confronto 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 contenuto

Qui 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 riferimenti

Se 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