Sobes.tech
Junior

Do czego służą metody equals() i toString() w Java?

sobes.tech AI

Odpowiedź od AI

Metoda equals() służy do porównywania obiektów pod kątem ich logicznej równoważności, czyli określa, czy dwa obiekty reprezentują tę samą wartość lub encję, niezależnie od tego, czy są tym samym fizycznym obiektem w pamięci.

Metoda toString() służy do uzyskania reprezentacji tekstowej obiektu. Domyślnie zwraca ona łańcuch zawierający nazwę klasy i jej kod hash, ale często jest nadpisywana, aby dostarczyć bardziej informacyjny opis stanu obiektu.

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; // Porównanie referencji
        if (o == null || getClass() != o.getClass()) return false; // Sprawdzenie typu i null
        ExampleObject that = (ExampleObject) o; // Rzutowanie typu
        return id == that.id && // Porównanie istotnych pól
               name.equals(that.name);
    }

    @Override
    public int hashCode() {
        // Nadpisanie hashCode jest obowiązkowe przy nadpisywaniu 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");

        // Użycie equals()
        System.out.println("obj1 equals obj2: " + obj1.equals(obj2)); // true - logicznie równoważne
        System.out.println("obj1 equals obj3: " + obj1.equals(obj3)); // false - różne obiekty

        // Użycie toString()
        System.out.println("obj1 toString(): " + obj1.toString()); // Wyświetli reprezentację tekstową obiektu
    }
}