Hãy xem xét thêm một phương pháp bình đẳng để các lớp sau đây của điểm đơn giản:Làm thế nào để Viết một phương pháp bình đẳng trong Java
public class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
// ...
}
// định nghĩa của tôi về bình đẳng
public boolean equals(Point other) {
return (this.getX() == other.getX() && this.getY() == other.getY());
}
Có gì sai với phương pháp này? Thoạt nhìn, có vẻ như để làm việc OK:
Point p1 = new Point(1, 2);
Point p2 = new Point(1, 2);
Point q = new Point(2, 3);
System.out.println(p1.equals(p2)); // prints true
System.out.println(p1.equals(q)); // prints false
Tuy nhiên, rắc rối bắt đầu khi bạn bắt đầu đặt điểm vào một bộ sưu tập:
import java.util.HashSet;
HashSet<Point> coll = new HashSet<Point>();
coll.add(p1);
System.out.println(coll.contains(p2)); // prints false
Làm thế nào nó có thể được rằng coll không chứa p2, mặc dù p1 được thêm vào nó, và p1 và p2 là các đối tượng bằng nhau?
Giải thích tốt ở đây: http://bytes.com/topic/java/insights/723476-overriding-equals-hashcode-methods Nội dung hóa - đây là một trong những quy tắc cơ bản nhất trong Java và câu hỏi phỏng vấn thường xuyên. –