// 傳統方式
public static final int MAN = 0;
public static final int WOMAN = 1;
// 枚舉方式
public enum Sex { MAN, WOMAN }
靜態常量本質是 int,可參與算術運算(MAN + WOMAN = 1),邏輯無意義。枚舉是獨立類型,編譯器禁止非法賦值:
Sex s = Sex.MAN; // ✅
// Sex s = 0; // ❌ 編譯錯誤
// s = s + 1; // ❌ 編譯錯誤
調試時直接顯示 Sex.MAN 而非數字 0,日誌輸出 System.out.println(s) 輸出「MAN」,無需查閱常量定義。
大型項目中成百上千常量易衝突。枚舉自帶命名空間:
Color.RED vs Status.RED // 無衝突
枚舉可攜帶字段、方法、實現接口:
public enum Sex {
MAN("男"), WOMAN("女");
private final String label;
Sex(String label) { this.label = label; }
public String getLabel() { return label; }
}