Java Interview Tasks
4.19K subscribers
199 photos
1 file
124 links
Реальные вопросы и задачи с собеседований.
Оригинальный авторский контент.
Актуальный материал.
Уровень вопросов от junior до supersenior.

Автор канала - @alexzelentsov

По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Download Telegram
🔍 Ответ на вопрос про сравнение объектов в Java:
Разберемся, как Java сравнивает объекты и что скрывается за методами equals() и hashCode().
У нас есть два объекта:

Object o1 = new Object();
Object o2 = new Object();
Теперь давайте посмотрим, что произойдет, если мы их сравним:

1️⃣ Сравнение ссылок (оператор ==):

System.out.println((o1 == o2)); // Выводит: false
🔸 Оператор == сравнивает адреса в памяти. Поскольку o1 и o2 — разные объекты, они находятся по разным адресам, что возвращает false.

2️⃣ Сравнение методом equals():

System.out.println(o1.equals(o2)); // Выводит: false
🔸 Метод equals() по умолчанию в классе Object работает как ==, сравнивая ссылки. Без переопределения возвращает false.

3️⃣ Сравнение значений hashCode():

System.out.println(o1.hashCode() == o2.hashCode()); // Выводит: false
🔸 Метод hashCode() вычисляет уникальное значение на основе текущего объекта (реализация может быть различна и может зависеть от платформы). Обычно для двух разных объектов значения будут уникальными.
Почитать подробнее можно тут.

💡 Итак, вывод программы:

false
false
false



✍️ В реальной практике нужно переопределять equals() и hashCode(), чтобы они отражали бизнес-логику ваших объектов.

Будьте внимательны и прописывайте правильные сравнения! 🤓



🎓 Надеюсь, это было полезно! Оставьте свои вопросы и комментарии ниже. 👇

#java #программирование #equals #hashcode #разработка
👍15🔥5🙏2
🔍 Ответ на задачу про MegaClass 📊

Давайте разберём, что именно будет напечатано при выполнении данного кода. Здесь мы имеем класс MegaClass с переопределёнными методами equals() и hashCode(), и работаем с объектами этого класса в HashSet. Обратите внимание на влияние изменения состояния объекта на результат работы методов, связанных с коллекциями.

Пояснения:

A: set.add(o) - Возвращает true, потому что объект o только что добавлен в set.

B: set.contains(new MegaClass(10)) - Возвращает false, так как после изменения поля i, o имеет hashCode = 1000, который не совпадает с 1000 у new MegaClass(10).

C: set.add(new MegaClass(10)) - Возвращает true, объект с hashCode равным 10 не найден в set, потому что изменили o.

D: set.contains(new MegaClass(1000)) - Возвращает false, так как теперь oбъект, у которого hashcode 1000, содержится в set, но предыдущий объект был добавлен с хешкодом 10 и поэтому он не найдется теперь.

E: new MegaClass(10).equals(new MegaClass(1000)) - Возвращает false, так как поля i отличаются.

📈 Этот пример отлично демонстрирует, насколько важно соблюдать неизменяемость полей, участвующих в вычислении hashCode() и equals(), при работе с коллекциями.

Если вам понравился анализ этого кода и вы хотите узнавать больше, ставьте лайк, подписывайтесь на канал и делитесь своими мыслями в комментариях! 👍💬

#java #hashcode #equals #collections #java_interview_tasks
🔥8👍53