Потому что у них разные ссылки.==
дает равенство ссылок, если два объекта ссылаются на одну и ту же ссылку или нет, для сравнения двух объектов вместо этого используйте метод equals
.как
проверяет, равны ли два объекта, но вы должны переопределить метод equals
и hashCode
, чтобы определить равенство
p1.equals(p2) //
Пример класса Point
может выглядеть следующим образом:
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// accessors omitted for brevity
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Point point = (Point) o;
return x == point.x && y == point.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
}
РЕДАКТИРОВАНИЕ:
Для сравнения объектов оператор равенства (==
) применяется к ссылкам на объекты, а не к объектам, на которые они указываютк.Две ссылки равны, если и только если они указывают на один и тот же объект или обе указывают на ноль.Смотрите примеры ниже:
Point x = new Point(3,4);
Point y = new Point (3,4);
Point z = x;
System.out.println(x == y); // Outputs false
System.out.println(x.equals(y) ); // Outputs true
System.out.println(x == z); // Outputs true