• 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()

Cloud VPS
0 głosów
1,436 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ź 249 wizyt
pytanie zadane 27 sierpnia 2016 w Java przez Jonki Dyskutant (8,180 p.)
+1 głos
2 odpowiedzi 432 wizyt
pytanie zadane 5 marca 2016 w Java przez Mar Cin Dyskutant (8,900 p.)
0 głosów
0 odpowiedzi 354 wizyt
pytanie zadane 5 września 2018 w PHP przez tomek0094 Nowicjusz (120 p.)

93,456 zapytań

142,451 odpowiedzi

322,721 komentarzy

62,837 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

Kursy INF.02 i INF.03
...