java 列舉類比較是用==還是equals?
阿新 • • 發佈:2018-12-13
一般在Java程式碼裡面,涉及到比較2個值的問題,除了是簡單的一般資料型別意外,字串除外,我們都是使用來判斷是否相等的,但是對於字串和物件以及封裝型別的資料都是使用equals方法,來判斷2個值是否相等。所以,當我看到別人的程式碼中,列舉型別變數,直接使用,來判斷是不是相等,很是詫異。然後就有了下面的調查和測試。
先看測試程式碼:
/** * 測試列舉比較,使用equal和== */ private static void testEnumEqual() { GameEnum s1 = GameEnum.BIG; GameEnum s2 = GameEnum.BIG; GameEnum ss1 = GameEnum.SMALL; System.out.println("s1 == s2:" + (s1 == s2)); System.out.println("s1.equals(s2):" + (s1.equals(s2))); System.out.println("s1 == ss1:" + (s1 == ss1)); System.out.println("s1.equals(ss1):" + (s1.equals(ss1))); }
再看使用的列舉程式碼:
/**
* Created by lxk on 2017/2/23
*/
public enum GameEnum{
BIG,
SMALL,
FATTER
}
最後是程式碼執行的結果圖: 結果是:
可以看到,使用== 和使用equals方法的執行結果是一樣的。
為什麼呢?
可以看下圖,因為在Enum類裡面,已經重寫了equals方法,而方法裡面比較就是直接使用,來比較2個物件的。所以,你在外邊直接使用也是可以的。