Java和C ++之间Enum的区别?

我正在学习java中的Enums我想知道在Java和C ++中Enum的主要区别是什么。 谢谢

在C ++中,枚举只是一组命名的积分常量。 在Java中,枚举更像是类的命名实例。 您可以自定义枚举中可用的成员。

此外,C ++将隐式地将枚举值转换为它们的整数等价,而转换必须在Java中是显式的。

有关维基百科的更多信息。

在c ++中,枚举只是一个整数值列表。 在java中,enum是一个扩展Enum的类,更像是一种很好的编写方式:

class MyEnum extends Enum { public final static MyEnum VE01 = new MyEnum(); public final static MyEnum VE02 = new MyEnum(); } 

作为枚举:

 enum MyEnum { VE01,VE02; } 

对于枚举方法,请看这个 。 由于java enum是一个对象,它支持普通java对象所做的一切。 给他们价值或function:

 enum Binary{ ZERO(0),ONE(1); Binary(int i) { value = i; } public final int value; } 

一个不错的是匿名类:

 enum State{ StateA{ public State doSomething() { //state code here return StateB; } }, StateB{ public State doSomething() { return StateA; } }; public abstract State doSomething(); } 

C / C ++中的枚举是普通的整数。

Java中的枚举是对象 – 它们可以有方法(从一个枚举实例到另一个实例具有不同的行为)。 此外,enum类提供的方法允许迭代所有枚举实例并查找枚举实例。

C ++:

 typedef enum { Red, Yellow, Green } Colors; void canCrossIntersection(Colors c) { return c == Green; } 

Java的:

 public enum Colors { RED(false), Yellow(false), Green(true) ; Color(boolean b) { this.b = b; } private boolean b; public boolean canCrossIntersection() { return b; } } 

在Java中,您甚至可以通过让它们实现相同的接口来模拟可扩展的枚举,然后通过调用它们的values()方法将它们的所有值添加到某种集合中。

对于半答案… C ++ 0x强类型枚举为Java C ++带来了许多优点:强类型,范围等等。 如果您的编译器支持C ++ 0x强类型枚举,则应考虑使用它们。

参考: http : //www2.research.att.com/~bs/C++0xFAQ.html#enum

缺少C ++的Java Enum的一个很棒的特性是name()方法。 这样,您可以获得Enum值名称(如枚举定义中所述),而无需在定义中添加任何额外的代码行。 例如:

 enum Type {T1, T2, T3} Type t = Type.T1; System.out.println(t.name()); // prints T1