Шаг 184.
Основы Kotlin.
Объекты. Классы данных. Функция equals()

    На этом шаге мы рассмотрим особенности реализации этой функции в различных классах.

    Следующая функция, реализованная в классах данных, - это equals(). Если бы Coordinate был обычным классом, какой результат вернуло бы это выражение?

  Coordinate(1, 0) == Coordinate(1, 0)

    Может показаться неожиданным, но оно вернет false. Почему?

    По умолчанию объекты сравниваются по ссылкам, так как это реализация по умолчанию функции equals() в Any. Так как эти координаты - независимые экземпляры, то у них будут разные ссылки и они не равны.

    Возможно, вы захотите считать, что два игрока с одним и тем же именем - это один и тот же игрок. Реализуйте проверку равенства, переопределив equals() в своем классе, и сравнивайте свойства, а не ссылки на память. Вы уже видели, как классы вроде String используют этот подход для сравнения по значению.

    И снова классы данных сделают за вас эту работу, использовав свою реализацию equals(), которая сравнивает свойства, объявленные в главном конструкторе. Если объявить Coordinate как класс данных, выражение

  Coordinate(1, 0) == Coordinate(1, 0) 
будет возвращать true, так как значения свойств х и у двух экземпляров равны.

    На следующем шаге мы рассмотрим функцию copy().




Предыдущий шаг Содержание Следующий шаг