默认的Object.toString()不附加hashCode()吗?

时间:2016-10-22 18:58:05

标签: java enums tostring hashcode

我在Airport.java有一个Enum类

package test;

public enum Airport {
    PHX,
    LAX,
    SFO,
    NRT,
    SIN;

    Airport() {
    }
}

和Test.java中的Test类

package test;

public class Test {

    public static void main(String[] args) {
        Airport a = Airport.PHX;
        System.out.println(a);
        System.out.println(String.valueOf(a));
        System.out.println(a.name());
        System.out.println(a.toString());
        System.out.println(a.name() + '@' + Integer.toHexString(a.hashCode()));
    }

}

此输出为

PHX
PHX
PHX
PHX
PHX@15db9742

但不应该输出

PHX
PHX
PHX
PHX@15db9742
PHX@15db9742

根据对象API WireShark Capture,默认Object.toString()getClass().getName() + '@' + Integer.toHexString(hashCode())

1 个答案:

答案 0 :(得分:5)

这确实是toString()的默认实现。但是,java.lang.Enum,所有enum的隐式基类通过返回其名称来覆盖toString()