• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównanie dwóch obiektów za pomocą equals()

Object Storage Arubacloud
0 głosów
1,313 wizyt
pytanie zadane 23 listopada 2015 w Java przez Przemcio Użytkownik (900 p.)
edycja 23 listopada 2015 przez Przemcio

Opis problemu: Stworzyłem prostą klasę Punkt opisującą punkt w przestrzeni 3D. Posiada 3 pola typu float reprezentujące wartośc x,y,z. Wszystkie są prawidłowo ustawione.

Napisałem funkcę porównującą dwa punkty w następujący sposób:

private static boolean comparePoints(Punkt p1, Punkt p2){
	return p1.equals(p2);
	}

Niestety funkcja ta zawsze zwrace false. Jakie mogą byćtego przyczyny?

Czy rozwiazanie tkwi nadpisaniu metody equals(), hashCode()?

 

Wywołanie metody:

System.out.println(comparePoints(p1,p2));

 

4 odpowiedzi

0 głosów
odpowiedź 24 listopada 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
wybrane 24 listopada 2015 przez Przemcio
 
Najlepsza
Punkt p1, Punkt p2

p1.equals(p2); //false

equals sprawdza czy dwie referencje do obiektow sa identyczne
a to oznacza że 

Punkt p1 = new Punkt(); 
Punkt p2 = p1; //referencja

p1.equals(p2) // wynik da true
0 głosów
odpowiedź 23 listopada 2015 przez event15 Szeryf (93,790 p.)
A co dajesz w argument tej funkcji? W sensie jak ją wywołujesz - czym?
komentarz 23 listopada 2015 przez Przemcio Użytkownik (900 p.)
System.out.println(comparePoints(p1,p2));

 

komentarz 23 listopada 2015 przez event15 Szeryf (93,790 p.)
No ale co to jest to p1 i p2? co jest nad tym?
komentarz 23 listopada 2015 przez Przemcio Użytkownik (900 p.)
p1.setPointValues(p1, sc);
p2.setPointValues(p2, sc);


gdzie:

private void setPointValues(Punkt point, Scanner sc)
	{
		point.setX(getUserPoint(sc));
		point.setY(getUserPoint(sc));
		point.setZ(getUserPoint(sc));
	}

 

0 głosów
odpowiedź 24 listopada 2015 przez adas94 Nałogowiec (29,200 p.)
Wywołujesz metodę equals klasy Object, która porównuje 2 obiekty. Metoda ta zawsze zwróci Ci false, jeśli będziesz porównywał 2 różne obiekty, nawet jeśli wszystkie pola tych obiektów będą identyczne. Jedyną opcją kiedy metoda equals klasy Object zwróci Ci true jest porównanie tego samego obiektu (w Twoim przypadku p1.equals(p1); )
0 głosów
odpowiedź 24 listopada 2015 przez Przemcio Użytkownik (900 p.)

Mikrokontroler xD i adas94 mają racje. Porównywałem tylko referencje tych dwóch obiektów, a przecież one są różne.

Rozwiazaniem problemu tkwi w odpowiednim nadpisaniu metody equals() tak aby porównywała każde pole obiektu, sprawdzała czy nie jest nullem, sprawdzała czy nie jest to ten sam obiekt i czy porównywane obiekty należą do tej samej klasy.

 

Dzięki za pomoc :) !

Podobne pytania

0 głosów
1 odpowiedź 158 wizyt
pytanie zadane 27 sierpnia 2016 w Java przez Jonki Dyskutant (8,180 p.)
+1 głos
2 odpowiedzi 299 wizyt
pytanie zadane 5 marca 2016 w Java przez Mar Cin Dyskutant (8,900 p.)
0 głosów
0 odpowiedzi 310 wizyt
pytanie zadane 5 września 2018 w PHP przez tomek0094 Nowicjusz (120 p.)

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...