==
, даже после десериализации и в многопоточной среде. Скомпилированный класс неявно наследуется от
java.lang.Enum
, в котором все методы из Object кроме toString
объявлены финальными. В частности, невозможно изменить поведение метода equals
– он сравнивает enum-ы с помощью ==
. Так что equals
тоже можно использовать без опаски.Но помимо этого есть несколько отличий в пользу ==:
1. == не выбросит
NullPointerException
. Прежде чем вызывать equals у переменной, придется удостовериться что она не null. 2. == не позволит сравнить объекты разных типов. Оператор еще на этапе компиляции подскажет, что такое сравнение не имеет смысла.
equals
же будет принимать аргумент под типом Object
, и всегда возвращать false
уже в рантайме. 3. == быстрее. Скорее всего разница в производительности будет незаметной, но тем не менее, оператор не требует лишнего вызова метода.