2016-10-22 4 views
-1

Iは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()よると10は

確かtoString()のデフォルトの実装ですgetClass().getName() + '@' + Integer.toHexString(hashCode())

+1

'enum'型は暗黙のうちに' Enum'クラスを拡張して最終的なものです。 –

+0

行1,2、および4はいずれにしても同じであることに注意してください。だから、あなたが4でハッシュコードを期待したならば、1と2にハッシュコードが存在するはずです。 –

答えて

5

です。ただし、java.lang.Enumの場合、enumの暗黙の基本クラスは、その名前を返すことによってtoString()をオーバーライドします。

+1

短く単純です。また、忘れないでください:http://stackoverflow.com/questions/13291076/java-enum-why-use-tostring-instead-of-name。 – MordechayS

+0

恐ろしく、ありがとう!それは本当に速かった。 –

+0

@ MordechayS、そのポストは実際にこれを探してウサギの穴を私を送った元のポストだった。 –

関連する問題