Java列舉比較用equals還是

2021-09-11 15:03:00 字數 623 閱讀 8817

前兩天code review,leader說列舉比較用equals不要用==,當時任務比較多,直接改了,沒有深究,今天有時間搜了一下,研究了一下列舉的實現,實際測試了一下,得出結論,對於列舉,==和equals的效果是相同的

原始碼檢視enum的原始碼,可以發現enum重寫了equals且禁止重寫,內部也是用的==實現的

public

final

boolean

equals

(object var1)

複製**

==和equals的區別參考這裡

列舉的比較實際上是比較兩個列舉物件的記憶體位址

列舉的實現

主要參考了這篇文章,十分詳細,跟著作者的思路過了一遍,明白了不少,強烈推薦大家細讀一遍

列舉是作為抽象類存在的,每個列舉型別都是作為乙個static final欄位存在,並且每個列舉型別在內部是作為子類實現的,並且列舉物件是單例的. 所以對於列舉的比較直接比較記憶體位址就可以了.這也是為什麼jdk原始碼會重寫equals並且宣告為final

基於列舉的特性,直接比較記憶體位址就可以,所以equals和==作用相同

java中equals 與 比較

1.對於 如果作用於基本資料型別的變數,則直接比較其儲存的 值 是否相等 如果作用於引用型別的變數,則比較的是所指向的物件的位址 2.對於equals方法 注意 equals方法不能作用於基本資料型別的變數 如果沒有對equals方法進行重寫,則比較的是引用型別的變數所指向的物件的位址 諸如stri...

Java「 」和equals 之間的比較

用來比較基本資料型別的值,或引用型別變數的雜湊值 實現就是呼叫 public boolean equals object obj 但有的類會重寫該方法,例如string,這是乙個物件,它的equals不是用來比較位址,而是用來比較字串的每乙個字元值 public boolean equals obj...

java中equals方法和「 」的比較

有兩種用法說明 1 對於字串變數來說,使用 和 equals 方法比較字串時,其比較方法不同。比較兩個變數本身的值,即兩個物件在記憶體中的首位址。equals 比較字串中所包含的內容是否相同。比如 string s1,s2,s3 abc s4 abc s1 new string abc s2 new...