为什么myEnum.ONE不等于myEnum.ONE.toString()?

1 java enums tostring

我有以下枚举:

public enum myEnum {
    ONE("ONE"), TWO("TWO");

    private String name;

    private myEnum(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么以下评估为假?我怀疑它与equals()方法的实现有关.

(myEnum.ONE).equals(myEnum.ONE.toString())
Run Code Online (Sandbox Code Playgroud)

mer*_*ike 5

通常,不同类型的对象没有被定义为相等,因为为了满足等于契约所规定的对称性,两个类必须彼此了解.

此外,因为平等必须是可传递的(这也是平等契约所规定的),引入你的规则会产生奇怪的后果.考虑:

enum Color {
    green, red, blue;
}

enum Experience {
    green, novice, veteran;
}
Run Code Online (Sandbox Code Playgroud)

应该Color.green相等Experience.green吗?可能不是,因为经验和颜色是真正不同的东西.但如果"green".equals(Color.green)"green".equals(Experience.green),Color.green必须等于Experience.green.

所以一般规则是:不相关类型的对象不相等.