2016-10-22 46 views
-1

我在Airport.java不是默认的Object.toString()追加hashCode()吗?

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 
[email protected] 

,但应该不是输出为

PHX 
PHX 
PHX 
[email protected] 
[email protected] 

根据对象API https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html默认Object.toString()getClass().getName() + '@' + Integer.toHexString(hashCode())

+1

一个'enum'类型隐式扩展了'Enum'类,并且是最终的。 –

+0

请注意,第1,2,4行无论如何都是相同的。所以如果你期望hashcode在4上,它应该出现在1和2上。 –

回答

5

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

+1

简短。另外,不要忘记:http://stackoverflow.com/questions/13291076/java-enum-why-use-tostring-instead-of-name。 – MordechayS

+0

太棒了,谢谢!这真的很快。 –

+0

@MordechayS,那篇文章实际上是把我送到兔子洞寻找的原始帖子。 –