2016-10-22 78 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,那篇文章實際上是把我送到兔子洞尋找的原始帖子。 –