什么是java中“java.lang.Enum”类型对象的标识和状态?

时间:2015-06-25 01:13:30

标签: java enums

在下面的代码中,

class Example{}
Example ex1 = new Example();
Example ex2 = new Example();
bool compareAddress = (ex1 == ex2);

此处,compareAddress提供false,因为身份ex1ex2指向的对象的内存地址。类型class Example{}的对象中的字段值(如果有)定义该对象的状态

但是在下面的代码中,

enum Company{
    EBAY(30), PAYPAL(10), GOOGLE(15), YAHOO(20), ATT(25);
    private int value;

    private Company(int value){
        this.value = value;
    }

}
Company x1 = Company.EBAY;
Company x1 = Company.EBAY;
bool compareValues = (x1 == x2);

此处,compareValues提供true

那么,x1x2所指向的对象的身份和状态是什么?

1 个答案:

答案 0 :(得分:4)

An enum is a special type of class.

例如

enum Company {
    EBAY
}

将编译为

final class Company extends Enum<Company> {
    public final static Company EBAY = new Company(); // almost, this constructor invocation will have arguments
}

字段EBAY将用于Java进程的其余部分&#39;生命,保持相同的参考值,这是对Company实例的引用。

来自JLS

  

因为每个枚举常量只有一个实例,所以它是   允许使用==运算符代替equals方法   比较两个对象引用,如果知道至少有一个   它们指的是enum常数。