【问题标题】:Doesn't the default Object.toString() append hashCode()?默认的 Object.toString() 不附加 hashCode() 吗?
【发布时间】:2017-03-04 21:36:46
【问题描述】:

我在 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 = 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())

【问题讨论】:

  • 一个enum 类型隐式扩展了Enum 类并且是最终的。
  • 请注意,第 1、2 和 4 行无论如何都是相同的。因此,如果您希望哈希码出现在 4 上,那么它也应该出现在 1 和 2 上。

标签: java enums tostring hashcode


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多