Java

почему false?почему false?почему false? Java

class A
{
}

A a = new A();
A b = new A();
System.out.print(a.equals(b)) // вернет false, почему, я же создаю 2 одинаковых объекта?
Ты создаешь два разных экземпляра одного класса. Потому и false

Как известно, все java-классы наследуются от класса Object. В этом классе уже определены методы hashCode() и equals().
Определяя свой класс, вы автоматически наследуете все методы класса Object. И в ситуации, когда в вашем классе не переопределены (@overriding) hashCode() и equals(), то используется их реализация из Object.

Рассмотрим исходный код метода equals() в классе Object.
public boolean equals(Object obj) {
return (this == obj);
}
При сравнение объектов, операция “==” вернет true лишь в одном случае — когда ссылки указывают на один и тот-же объект. В данном случае не учитывается содержимое полей.

Выполнив приведённый ниже код, equals вернет true.
public class DemoBlackBox {
public static void main(String[] args) {
BlackBox object3 = new BlackBox(5, 10);
BlackBox object4 = object3;// Переменная object4 ссылается на
//тот-же объект что и переменная object3
object3.equals(object4)//true
}
}
Теперь понято, почему Object.equals() работает не так как нужно, ведь он сравнивает ссылки, а не содержимое объектов.
Радик Хикматуллин
Радик Хикматуллин
17 671
Лучший ответ
Виктор Казанцев я думал equals сравнивает 2 объекта по содержимому (одинаковые ли переменные, методы и пр.)
Ты создаешь 2 разных объекта (указатели-то разные!). Чтобы было 2 одинаковых, должно быть так:

A a = new A();
A b = а;
Виктор Казанцев я думал equals сравнивает 2 объекта по содержимому (одинаковые ли переменные, методы и пр.)
Это два объекта, и метод equals не перегружен. Если бы он был перегружен, он мог бы сравнивать объекты так, как тебе нужно. Базовая реализация equals сравнивает только ссылки, но не содержимое. Поэтому equals в данном случае не отличается от ==.
Виктор Казанцев вырезка из учебника
оператор == сравнивает указатели на объекты а не сами объекты. Так как вы создали два разных объекта, то очевидно что они находятся в разных участках памяти. Соответственно указатели разные.
Vik Vs
Vik Vs
923
false
Дима Куров
Дима Куров
143