java枚举类使用 == 还是equals来进行比较
生活随笔
收集整理的這篇文章主要介紹了
java枚举类使用 == 还是equals来进行比较
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
相同之處
當我們對對象進行比較時通常用重寫過的equals來進行比較,因為 == 比較的是對象的地址。而對于Enum來說,二者皆可拿來進行比較運算,簡單示例:
public enum Season0 {SPRING,SUMMER,AUTUMN,WINTER } public enum Season1 {SPRING,SUMMER,AUTUMN,WINTER } public class enum_tset {public static void main(String[] args){Season0 s1 = Season0.SPRING;Season0 s2 = Season0.SPRING;System.out.println(s1 == s2);System.out.println(s1.equals(s2));} }二者區別:
== 會在編譯期檢查兼容性,若兩個不同Enum類的屬性進行對比,提示編譯錯誤,因為這肯定是不相等的。
而equals則不會檢查編譯錯誤,并正常運行返回false
另外,還有一處不同之處,當前一個屬性為null時,== 正常運行,而equals出現空指針異常。
public class enum_tset {public static void main(String[] args){Season0 s1 = null;Season0 s2 = Season0.SPRING;System.out.println(s1 == s2);System.out.println(s1.equals(s2));} }
當第一個屬性不為null,第二個為null時都正常運行,這里不在展示,看equals源碼,是調用this來比較的,this為null當然會拋出空指針異常。
總結:
枚舉會被編譯成一個包含私有構造參數和一堆靜態方法的類,考慮靜態工廠方法代替構造器 它使得不可變的類可以確保不會存在兩個相等的實例,即當且僅當a=b的時候才有a.equals(b)為true。如果類保證了這一點,就可以使用“==”操作符來代替equals(Object)方法,這樣可以提升性能。枚舉類型保證了這一點
總而言之,在枚舉比較上使用 == , 因為: 1. 能正常工作 2. 更快 3. 運行時是安全的 4. 編譯期也是安全的
參考:https://blog.csdn.net/x_iya/article/details/53291536
總結
以上是生活随笔為你收集整理的java枚举类使用 == 还是equals来进行比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Integer.MAX_VALUE
- 下一篇: win10家庭版安装docker(Doc