Sobes.tech
Junior

A cosa servono i metodi equals() e toString() in Java?

sobes.tech AI

Risposta dell'AI

Il metodo equals() viene utilizzato per confrontare gli oggetti in termini di equivalenza logica, cioè determina se due oggetti rappresentano lo stesso valore o entità, indipendentemente dal fatto che siano lo stesso oggetto fisico in memoria.

Il metodo toString() viene utilizzato per ottenere una rappresentazione in stringa dell'oggetto. Per impostazione predefinita, restituisce una stringa contenente il nome della classe e il suo hash code, ma spesso viene sovrascritto per fornire una descrizione più informativa dello stato dell'oggetto.

public class ExampleObject {
    private int id;
    private String name;

    public ExampleObject(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Confronto delle referenze
        if (o == null || getClass() != o.getClass()) return false; // Controllo del tipo e null
        ExampleObject that = (ExampleObject) o; // Cast del tipo
        return id == that.id && // Confronto sui campi significativi
               name.equals(that.name);
    }

    @Override
    public int hashCode() {
        // Sovrascrivere hashCode è obbligatorio quando si sovrascrive equals
        return Objects.hash(id, name);
    }

    @Override
    public String toString() {
        return "ExampleObject{" +
               "id=" + id +
               ", name='" + name + '\'' +
               '}';
    }

    public static void main(String[] args) {
        ExampleObject obj1 = new ExampleObject(1, "Test");
        ExampleObject obj2 = new ExampleObject(1, "Test");
        ExampleObject obj3 = new ExampleObject(2, "Another");

        // Uso di equals()
        System.out.println("obj1 equals obj2: " + obj1.equals(obj2)); // true - logicamente equivalenti
        System.out.println("obj1 equals obj3: " + obj1.equals(obj3)); // false - oggetti diversi

        // Uso di toString()
        System.out.println("obj1 toString(): " + obj1.toString()); // Mostra la rappresentazione in stringa dell'oggetto
    }
}