На этом шаге мы рассмотрим особенности реализации этой функции в различных классах.
Следующая функция, реализованная в классах данных, - это equals(). Если бы Coordinate был обычным классом, какой результат вернуло бы это выражение?
Coordinate(1, 0) == Coordinate(1, 0)
Может показаться неожиданным, но оно вернет false. Почему?
По умолчанию объекты сравниваются по ссылкам, так как это реализация по умолчанию функции equals() в Any. Так как эти координаты - независимые экземпляры, то у них будут разные ссылки и они не равны.
Возможно, вы захотите считать, что два игрока с одним и тем же именем - это один и тот же игрок. Реализуйте проверку равенства, переопределив equals() в своем классе, и сравнивайте свойства, а не ссылки на память. Вы уже видели, как классы вроде String используют этот подход для сравнения по значению.
И снова классы данных сделают за вас эту работу, использовав свою реализацию equals(), которая сравнивает свойства, объявленные в главном конструкторе. Если объявить Coordinate как класс данных, выражение
Coordinate(1, 0) == Coordinate(1, 0)
На следующем шаге мы рассмотрим функцию copy().