Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 487новых вакансий за сутки·92 551вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 220
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

DevOps и инфраструктура

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

Аналитика и данные

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

Другие направления

  • Проджект-менеджер611
  • UI/UX дизайн145
  • Ручное тестирование14

По регионам

  • Вакансии в США43 685
  • Вакансии в Европе23 684
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 887
  • Релокация в США43 685
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме JavaВсе вопросы
JavaJuniorТеория

В чём разница между == и .equals() в Java?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

== сравнивает ссылки (для объектов) или значения (для примитивов); equals() сравнивает логическое содержимое. Переопределяя equals(), всегда переопределяйте hashCode() — иначе HashMap/HashSet работают некорректно.

Оператор == и метод equals()

В Java == всегда сравнивает значения на стеке. Для примитивов (int, long, double) это само значение. Для объектов — адрес ссылки в куче. Метод equals() сравнивает логическое содержимое объекта согласно переопределённой реализации.

String a = new String("hello");
String b = new String("hello");

System.out.println(a == b);       // false — разные объекты в куче
System.out.println(a.equals(b));  // true  — одинаковое содержимое

// String pool (интернирование)
String c = "hello";
String d = "hello";
System.out.println(c == d);       // true — оба указывают на один объект из пула

String pool и Integer cache

Строковые литералы интернируются JVM автоматически: "hello" == "hello" даёт true. Это ловушка: new String("hello") создаёт новый объект в куче. Аналогично для Integer: значения -128…127 кэшируются, поэтому Integer.valueOf(127) == Integer.valueOf(127) — true, а для 128 уже false.

Integer x = 127;
Integer y = 127;
System.out.println(x == y);  // true (из кэша)

Integer p = 128;
Integer q = 128;
System.out.println(p == q);  // false (разные объекты)
System.out.println(p.equals(q));  // true

Контракт equals()

Переопределение equals() должно удовлетворять пяти свойствам из javadoc Object:

  • Рефлексивность: x.equals(x) → true
  • Симметричность: x.equals(y) ↔ y.equals(x)
  • Транзитивность: если x.equals(y) и y.equals(z), то x.equals(z)
  • Консистентность: повторные вызовы возвращают одно значение при неизменных данных
  • Ненулевость: x.equals(null) → false

Связь с hashCode

Критически важное правило: если a.equals(b), то a.hashCode() == b.hashCode() обязательно. Обратное не требуется (коллизии допустимы). Нарушение этого правила ломает HashMap, HashSet и все hash-коллекции.

public class User {
    private final String email;

    public User(String email) { this.email = email; }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User other)) return false;
        return Objects.equals(email, other.email);
    }

    @Override
    public int hashCode() {
        return Objects.hash(email);
    }
}

// В record equals/hashCode генерируются автоматически по всем компонентам
record Point(int x, int y) {}
Point p1 = new Point(1, 2);
Point p2 = new Point(1, 2);
System.out.println(p1.equals(p2));  // true

Подводные камни

  • Сравнение строк через == — самая частая ошибка джунов: userInput == "admin" почти всегда false.
  • Переопределили equals(), но забыли hashCode() — объект не найдётся в HashSet после добавления.
  • Нарушение симметричности при наследовании: если ColorPoint.equals(Point) учитывает цвет, а Point.equals(ColorPoint) нет — контракт нарушен.
  • instanceof в equals() разрешает подклассы; getClass() == o.getClass() — строгое сравнение. Для record JVM генерирует строгое сравнение.
  • Mutable поля в equals()/hashCode() могут сломать HashMap при изменении объекта после вставки.
  • Autoboxing: long == Long распаковывает Long, но Long == Long сравнивает ссылки — результат неожиданный для больших чисел.
  • Objects.equals(a, b) безопасен к null в отличие от a.equals(b) — предпочитайте его в реализации.

Типичные ошибки

  • Путать термин «equals identity» с соседним механизмом Java.
  • Не называть границу lifecycle, transaction, thread или request для «equals identity».
  • Игнорировать production-эффекты «equals identity»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «equals identity» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «equals identity».
  • Уточнить, какие настройки или API меняют «equals identity» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Java →

Источники

  • https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/HashMap.html
←Предыдущий вопросЧто такое functional interface? Назовите несколько встроенных functional interfaces в Java.Следующий вопрос→Что такое deadlock? Как его обнаружить и предотвратить?

Связанные темы

Javabackend-designtechnical-communication

Вакансии с этим навыком

Java вакансии
  • Software Developer – Analytics Data Platform (Data Reliability)
  • Senior Software Engineer - Fincrime Reporting
  • Security Engineer II - (Product Security)
  • Senior Backend Engineer - Servicing Platform
  • Senior Backend Engineer - Servicing Platform

Частые вопросы на собеседовании

  • Как работает сборка мусора в Java? Объясните G1GC, ZGC и Shenandoah.
  • Как работает модель памяти Java? В чём разница между heap и stack?
  • Объясните Java Memory Model (JMM) и концепцию happens-before.
  • Что такое virtual threads (Project Loom) и чем они отличаются от platform threads?