Ich habe einen Class Point implementiert und ich möchte sehen, ob Objekte der Klasse gleich sind oder nicht mit dem Operator ==. Ich recherchierte und fand mehrere Lösungen, die mir befahlen, die Equals-Methode von Object zu überschreiben. Ich habe getan, als ich gelesen habe, aber der Operator == funktioniert immer noch nicht. Wenn ich p1.equals (p2) benutze, funktioniert es aber. Kann mir jemand sagen, was ich falsch gemacht habe? Ich habe sogar versucht, die Methode hashCode zu überschreiben, obwohl ich nicht vorhabe, Point in einem Container zu verwenden.== operator funktioniert nicht mit overriden gleich methode
Implementierung von Point:
public final class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object other) {
if (!(other instanceof Point)) {
return false;
}
Point that = (Point) other;
return this.x == that.x && this.y == that.y;
}
@Override
public int hashCode() {
return x + y; //just for testing, equal objects should return same hash?
}
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
My Test-Klasse:
public class Test {
public static void main(String[] args) {
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
if(p1.equals(p2)) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
if(p1 == p2) {
System.out.println("equal");
} else {
System.out.println("not equal");
}
System.out.println(p1);
}
}
Ausgabe lautet:
equal
not equal
(1,2)
so scheint die toString Methode überschrieben zu arbeiten, aber das einzige, was wont Arbeit ist der Operator ==. Ich versuchte, eine Sout zu der überschriebenen Methode equals hinzuzufügen, und es würde nur seine Nachricht anzeigen, wenn ich die equals-Methode direkt von p2.equals (p2) ausführen ...
Das ist, weil "equals" und "==" verschiedene Dinge testen. 'equeds' testet die Gleichheit (die für jede Klasse in einer benutzerdefinierten Weise definiert werden kann),' == 'testet die Identität (was nicht möglich ist). –
In der Tat - Sie können keine Operatoren in Java überladen. –
In diesem Forum gibt es viele Fragen dazu, wie Sie die equals-Methode überschreiben können, um Ihre eigene Definition von Gleichheit für Ihre eigenen benutzerdefinierten Klassen mit dem Operator == zu aktivieren, der dann keine Adressen vergleicht, sondern Ihre Implementierung der überschriebenen equals-Methode verwendet. – Maxincredible52