在下面的代码中,
class Example{}
Example ex1 = new Example();
Example ex2 = new Example();
bool compareAddress = (ex1 == ex2);
此处,compareAddress
提供false
,因为身份是ex1
和ex2
指向的对象的内存地址。类型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
。
那么,x1
和x2
所指向的对象的身份和状态是什么?
答案 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
常数。