class A
{
}
A a = new A();
A b = new A();
System.out.print(a.equals(b)) // вернет false, почему, я же создаю 2 одинаковых объекта?
Java
почему false?почему false?почему false? Java
Ты создаешь два разных экземпляра одного класса. Потому и 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() работает не так как нужно, ведь он сравнивает ссылки, а не содержимое объектов.
Как известно, все 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() работает не так как нужно, ведь он сравнивает ссылки, а не содержимое объектов.
Виктор Казанцев
я думал equals сравнивает 2 объекта по содержимому (одинаковые ли переменные, методы и пр.)
Ты создаешь 2 разных объекта (указатели-то разные!). Чтобы было 2 одинаковых, должно быть так:
A a = new A();
A b = а;
A a = new A();
A b = а;
Виктор Казанцев
я думал equals сравнивает 2 объекта по содержимому (одинаковые ли переменные, методы и пр.)
Это два объекта, и метод equals не перегружен. Если бы он был перегружен, он мог бы сравнивать объекты так, как тебе нужно. Базовая реализация equals сравнивает только ссылки, но не содержимое. Поэтому equals в данном случае не отличается от ==.
оператор == сравнивает указатели на объекты а не сами объекты. Так как вы создали два разных объекта, то очевидно что они находятся в разных участках памяти. Соответственно указатели разные.
false
Похожие вопросы
- Почему в Java метод main является static? Почему в Java метод main является static?
- Ребят а почему многие говорят что Java умирает и через лет 10 будет не востребован? Это правда? А то вот начал его учить
- Почему все майнкрафтеры лезут в Программирование/Java ? .
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Почему вакансий программистов c# меньше, чем вакансий java?
- Почему Android Studio написана на Java а не на С/С++?
- Помогите доделать код на java. В форму пользователь вводит символ, который нужно заменить на #.
- Не выводит изображение в JAVA
- Java проблема с рефлексией.
- Почему Java такая популярная?