Aşırı eşittir yöntemiyle çalışmaz. Bir Sınıf Noktası uygulamam ve sınıftaki nesnelerin eşit olup olmadığını görmek istiyorum == işleci kullanarak. Object'ten eşitlik yöntemini geçersiz kılmamı söyleyen birkaç çözüm araştırdım ve buldum. Okuduğum gibi yaptım ama == operatör hala çalışmıyor. P1.equals (p2) kullanırsam, çalışır. Bana yanlış yaptığımı söyleyen var mı? Hatta bir kapta Noktayı kullanmayı planlamadığım halde, hashCode yöntemini de geçersiz kılmaya çalıştım. Point== işleç,
Uygulama:
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;
}
}
Benim Testi sınıfı:
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);
}
}
çıktısı:
equal
not equal
(1,2)
böylece toString yöntemi geçersiz görünüyor
çalışmak ama alışkanlık tek şey iş == operatörünün kendisi. Ben geçersiz kılınmış bir sout yöntemi eşittir eklemeyi denedim, ve ben p2.equals (p2) tarafından doğrudan eşittir yöntemi yürütmek zaman sadece
Çünkü "eşittir" ve "==" farklı şeyleri test eder. 'eşittir' (her sınıf için özel bir şekilde tanımlanabilir) eşitliği test eder, '==' kimlik (test edemez). –
Gerçekten de - Java'daki operatörleri aşırı yükleyemezsiniz. –
Bu forumda, eşitlik tanımınızı kendi özel sınıflarınıza tanımlamak için eşitlik yöntemini nasıl geçersiz kılacağınıza ilişkin birçok soru vardır; bu, == operatörünü kullanarak, daha sonra adresleri karşılaştırmayan ancak geçersiz kılınan eşitlik yönteminin uygulanmasını kullanan. – Maxincredible52