1、#define 巨集常量是在預編譯階段進行簡單替換。列舉常量則是在編譯的時候確定其值。
2、一般在編譯器裡,可以除錯列舉常量,但是不能除錯巨集常量。
3、列舉可以一次定義大量相關的常量,而#define 巨集一次只能定義一個。
拓展:
列舉簡單的說也是一種資料型別,只不過是這種資料型別只包含自定義的特定資料,它是一組有共同特性的資料的集合。舉個例子,顏色也可以定義成列舉型別。
它可以包含你定義的`任何顏色,當需要的時候,只需要通過列舉呼叫即可。
另外比如說季節(春夏秋冬)、星期(星期一到星期日)等等這些具有共同投特徵的資料都可以定義列舉。
用法一:常量
在JDK1.5 之前,我們定義常量都是: publicstaticfianl.... 。現在好了,有了列舉,可以把相關的常量分組到一個列舉型別裡,而且列舉提供了比常量更多的方法。
用法二:switch
JDK1.6之前的switch語句只支援int,char,enum型別,使用列舉,能讓我們的程式碼可讀性更強。
用法三:向列舉中新增新方法
如果打算自定義自己的方法,那麼必須在enum例項序列的最後新增一個分號。而且 Java 要求必須先定義 enum 例項。
用法四:覆蓋列舉的方法
下面給出一個toString()方法覆蓋的例子。
Java程式碼
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變數
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
= name;
x = index;
}
//覆蓋方法
@Override
public String toString() {
return x+"_"+;
}
}
用法五:實現介面
所有的列舉都繼承自類。由於Java 不支援多繼承,所以列舉物件不能再繼承其他類。
用法六:使用介面組織列舉
Java程式碼
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
用法七:關於列舉集合的使用
Set和Map是兩個列舉集合。EnumSet保證集合中的元素不重複;EnumMap中的 key是enum型別,而value則可以是任意型別。關於這個兩個集合的使用就不在這裡贅述,可以參考JDK文件。
關於列舉的實現細節和原理請參考: