#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
Комментариев нет:
Отправить комментарий