1. 程式人生 > >java 列舉類比較是用==還是equals?

java 列舉類比較是用==還是equals?

一般在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個物件的。所以,你在外邊直接使用也是可以的。 在這裡插入圖片描述