Nie rozumiem składni: Nadpisywanie metody equals.

0
public boolean equals(Object obj) {
   return (this == obj);
}

Mam problem z powyższym kodem . Rozumiem co on robi (jest to nadpisanie metody equals które powoduje ze zostanie porównana "zawartość" zmiennych danej klasy a nie referencja ) ale nie rozumiem samego zapisu "this==obj"? Wiem co on robi ale nie rozumiem jego struktury . Gdy zawartość podanego w argumencie metody equals objektu jest równa ...???? Czemu co wskazuje to this ?? To jakiś skrócony zapis ? This używam gdy chce wskazać zmienną klasy o tej samej nazwie co zmienna metody w tym przypadku nie wiem co to oznacza.

0

this odnosi się konkretnego obiektu, którego używasz:
== porównuje ci referencje, czyli sprawdza, czy obiekt1 to obiekt 2
Myśl o nazwie zmiennej, mniej jak o obiekcie jako takim, ale bardziej jak o jego adresie (tak jak dom ma adres, nie chodzi mi o ten komputerowy adres). A obiekt może mieć kilka adresów, bo czemu nie?

Foo foo1 = new Foo();
Foo foo2 = new Foo();
Foo foo3 = new Foo();
Foo foo4 = foo1;

foo1.equals(foo1); // this to foo1, obj to foo1, wynik to true
foo1.equals(foo2); // this to foo1, obj to foo2, wynik to false
foo1.equals(foo3); // this to foo1, obj to foo3, wynik to false
foo1.equals(foo4); // this to foo1, obj to foo4, czyli foo1, wynik to true

foo2.equals(foo1); // this to foo2, obj to foo2, wynik to true
foo2.equals(foo2); // this to foo2, obj to foo2, wynik to false
foo2.equals(foo3); // this to foo2, obj to foo2, wynik to false
foo2.equals(foo4); // this to foo2, obj to foo4, czyli foo1, wynik to false

0

this to referencja do obiektu, w którym aktualnie się znajdujemy (czyli obiekt z klasy, w której znajduje się kod).
obj przekazywany jako argument to z kolei referencja do innego obiektu.

Porównanie this == obj porównuje referencje obu obiektów, to znaczy sprawdza czy te obiekty są tym samym obiektem.

metody equals które powoduje ze zostanie porównana "zawartość" zmiennych danej klasy a nie referencja <

Metodę equals można zaimplementować na różne sposoby - implementacja pokazana przez Ciebie porównuje referencje. O metodzie equals jest trochę w "Effective Java" (https://www.ideyatech.com/blog/2011/04/13/effective-java-equals-and-hashcode/)

0

this to referencja na aktualny obiekt (jako całość), służy też do wywoływnia, z wnętrza konstruktora, innego konstruktora tej klasy. A tu:
https://web.mit.edu/6.005/www/fa16/classes/15-equality/
czytanka o equals.

0

hmm rozumiem. Jeżeli klasa osoby ma powiedzmy 3 zmienne typu int . A ja bym chciał za pomocą equals porównać dowolną zmienną 1 obiektu z odpowiadającą zmienną 2 obiektu (tej samej klasy) jak nadpisać equals?
Na razie jestem w stanie wytworzyć coś na tą modę .

osoby pawel=new osoby(1,3);
    osoby agnieszka=new osoby(1,3);
    System.out.println(pawel.equals(agnieszka));    
}
}
class w{
public static void main(String[]args)throws IOException{
    osoby pawel=new osoby("s","a");
    osoby agnieszka=new osoby("s","d");
    System.out.println(pawel.a.equals(agnieszka.a));    
}
}
class osoby {
    String a;
    String b;

    public osoby(String a,String b){
        this.a=a;
        this.b=b;
    }

    public boolean equals(osoby os){
        if(this.a==a)
        return true;
        else return false;
    }

	
       
        

jak nadpisać equals muszę dla kazdej zmiennej klassy deklarować if() ?

0
okon66113 napisał(a):
public boolean equals(Object obj) {
   return (this == obj);
}

Mam problem z powyższym kodem . Rozumiem co on robi (jest to nadpisanie metody equals które powoduje ze zostanie porównana "zawartość" zmiennych danej klasy a nie referencja )
Ten kod nie sprawdza "zawartości". Sprawdza jedynie czy zgadzają się referencje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1