Java 默认的Object.toString()是否附加hashCode()?
我在Airport.java中有一个Enum类Java 默认的Object.toString()是否附加hashCode()?,java,enums,tostring,hashcode,Java,Enums,Tostring,Hashcode,我在Airport.java中有一个Enum类 package test; public enum Airport { PHX, LAX, SFO, NRT, SIN; Airport() { } } 以及Test.java中的一个测试类 package test; public class Test { public static void main(String[] args) { Airport a
package test;
public enum Airport {
PHX,
LAX,
SFO,
NRT,
SIN;
Airport() {
}
}
以及Test.java中的一个测试类
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
根据Object API,默认的Object.toString是getClass.getName+'@'+Integer。toHexStringhashCode这确实是toString的默认实现。但是,所有枚举的隐式基类java.lang.Enum通过返回其名称来覆盖toString。枚举类型隐式扩展枚举类,并且是最终的。请注意,第1、2和4行仍然相同。因此,如果您希望hashcode出现在4上,那么它也应该出现在1和2上。还有,别忘了:。@MordechayS,那篇帖子实际上是我在兔子洞里寻找这个的原始帖子。