@Indeoo_CNR

Почему я создаю одинаковые объекты а у них разные хэшкоды?

Создаю 2 одинаковых экземпляра класса, а их хэшкоды разные, что я делаю не так?
Ведь по идее хэшкоды одинаковых объектов ВСЕГДА должны быть одинаковыми.
Заранее спасибо за ответ!
Как создаю и вывожу:
e7897ffca83c4c3dac83e66b180d808b.png
Какой вывод получаю:
cec601243862470d84b4e67311a02a67.png
Класс и его конструктор:
9bcdae2f7e294f8ea7dbb4690a5be03b.png
Что я ожидал (условно):
38f6ddd128c0371f0586d157a562b1ae.png
(https://habrahabr.ru/post/168195/)
  • Вопрос задан
  • 779 просмотров
Пригласить эксперта
Ответы на вопрос 4
roswell
@roswell
и швец, и жнец, и на дуде игрец
Потому что всё-таки это два разных объекта. Чтобы hashCode возвращал значение, привязанное к атрибутам объекта, нужно в классе Card переопределить метод hashCode (а заодно и equals, чтобы соблюсти контракт) с кастомным подсчётом хеша, иначе всё будет происходить соответственно докции:
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the Java™ programming language.)
Ответ написан
Комментировать
@koronabora
Человек
Здесь хэш код считается, грубо говоря, с учетом адреса в памяти и количеством занимаемой памяти. Поэтому, т.к. у них разные адреса, будут и разные хэш коды. Если вы хотите сравнивать содержимое классов, то будет проще написать собственный вариант equals и сравнивать по полям.
Ответ написан
@jkotkot
режим сарказма
Так они не одинаковые:) Можешь сам проверить, что они не equals
Ответ написан
lxsmkv
@lxsmkv
Test automation engineer
на картинке неудачно используют обозначение object1 object2.
На самом деле имеется ввиду если ссылка указывает на один и тот же объект, то хешкод будет идентичным.
код
public class Main{
  public static void main(String [] args){
    H h1 = new H();
    H h2 = new H();
    System.out.println(h1.hashCode());
    System.out.println(h2.hashCode());
    h2 = h1;
    System.out.println(h1.hashCode());
    System.out.println(h2.hashCode());
  }
}
class H{
  int a = 2;
  int b = 3;
}

output
1252169911
2101973421
1252169911
1252169911
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
25 апр. 2024, в 19:22
18000 руб./за проект
25 апр. 2024, в 19:21
10000 руб./за проект
25 апр. 2024, в 18:47
2795100 руб./за проект