默认的Object.toString()不是追加hashCode()吗?
Doesn't the default Object.toString() append hashCode()?
我在 Airport.java
中有一个枚举 class
package test;
public enum Airport {
PHX,
LAX,
SFO,
NRT,
SIN;
Airport() {
}
}
和 Test.java
中的测试 class
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 https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html默认的Object.toString()
是getClass().getName() + '@' + Integer.toHexString(hashCode())
这确实是 toString()
的默认实现。但是,java.lang.Enum
,所有 enum
的隐式基础 class 通过返回其名称覆盖 toString()
。
我在 Airport.java
中有一个枚举 classpackage test;
public enum Airport {
PHX,
LAX,
SFO,
NRT,
SIN;
Airport() {
}
}
和 Test.java
中的测试 classpackage 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 https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html默认的Object.toString()
是getClass().getName() + '@' + Integer.toHexString(hashCode())
这确实是 toString()
的默认实现。但是,java.lang.Enum
,所有 enum
的隐式基础 class 通过返回其名称覆盖 toString()
。