Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Почему статическая доступность позволяет выполнять сравнение с помощью оператора сравнения ссылок ==?

#java


В одной статье наткнулась на следующие строки:


  Элементы enum Season (WINTER, SPRING и т.д.) - это статически
  доступные экземпляры enum-класса Season. Их статическая доступность
  позволяет нам выполнять сравнение с помощью оператора сравнения ссылок
  ==.


А каким образом статическая доступность позволяет выполнять сравнение с помощью оператора
сравнения ссылок ==? Почему нестатические объекты сравнивать через == нельзя, а статические
можно?
    


Ответы

Ответ 1



При сравнению через == сравниваются указатели, а статические поля класса одинаковы для всех экземпляров класса - указатели на них определяются в момент запуска программы. Если поле финальное, то оно не изменяется на протяжении всей работы программы. А элементы enum как раз финальные (в вашей ссылке далее по тексту приводится пример декомпиляции enum-а - это класс с public static final полями). Почему нестатические объекты сравнивать через == нельзя, а статические можно? Неизменяемость указателей статических полей и позволяет их сравнивать. Примерным аналогом enum может служить следующий класс ("примерным", т.к. для полноты соответствия нужно также реализовать методы valueOf, values): public class Season { public static final Season WINTER = new Season(); public static final Season SPRING = new Season(); public static final Season SUMMER = new Season(); public static final Season AUTUMN = new Season(); private Season() {} } Season a = Season.AUTUMN; Season b = Season.AUTUMN; System.out.println(a == b); //true

Комментариев нет:

Отправить комментарий