2016-10-22 3 views
-1

ich in Airport.javaWird nicht standardmäßig Object.toString() an hashCode() angehängt?

eine Enum-Klasse haben
package test; 

public enum Airport { 
    PHX, 
    LAX, 
    SFO, 
    NRT, 
    SIN; 

    Airport() { 
    } 
} 

und eine Test-Klasse in 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())); 
    } 

} 

Der Ausgang dieses für ist

PHX 
PHX 
PHX 
PHX 
[email protected] 

sollte aber nicht die Ausgabe ist

PHX 
PHX 
PHX 
[email protected] 
[email protected] 

Nach dem dem Objekt API https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html Standard Object.toString() ist getClass().getName() + '@' + Integer.toHexString(hashCode())

+1

Ein 'enum' Typ erweitert implizit die' Enum' Klasse und ist endgültig. –

+0

Beachten Sie, dass die Zeilen 1, 2 und 4 trotzdem identisch wären. Wenn Sie also den Hashcode auf 4 erwarten, sollte er auch auf 1 und 2 vorhanden sein. –

Antwort

5

, dass die Umsetzung von toString() in der Tat der Standard ist. java.lang.Enum jedoch überschreibt die implizite Basisklasse für alle enum s toString(), indem sie ihren Namen zurückgibt.

+1

Kurz und einfach. Vergessen Sie auch nicht: http://stackoverflow.com/questions/13291076/java-enum-why-use-tostring-instead-of-name. – MordechayS

+0

Ehrfürchtig, danke! Das war sehr schnell. –

+0

@MordechayS, dieser Beitrag war eigentlich der ursprüngliche Beitrag, der mich auf der Suche nach diesem Kaninchenloch schickte. –

Verwandte Themen