每個列舉成員都會有個名稱與int值,可透過name方法取得名稱,適用於需要使用字串代表列舉值的場合,列舉的int值從0開始,依列舉順序遞增,可以透過ordinal方法取得,適用於需要使用int代表列舉值的場合。
列舉成員重新定義了equals與hashCode,並標示為final,實作邏輯與Object的equals與hashCode相同。
列舉時可以定義方法,然而不能重新定義equals與hashCode,這是因為列舉成員,在JVM只會存在單一實例,編譯器會如上產生final的equals與hashCode,基於Object定義的equals與hashCode,來比較物件相等性。
定義列舉時可以自定義建構式,條件是不得公開或受保護,也不可於建構式中呼super。
建構式定義為private,想在enum中呼叫建構式,只要在列舉成員後加上括號,就可以指定建構式的引數,你不能定義name、ordinal方法,它們是由編譯器產生,因此自定義了value方法來傳回int值。