2016-10-22 7 views
-1

У меня есть класс Enum в Airport.javaНе по умолчанию Object.toString() append hashCode()?

package test; 

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

    Airport() { 
    } 
} 

и класс Test в 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 
[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 были бы одинаковыми. Поэтому, если вы ожидали хэш-код на 4, он также должен присутствовать на 1 и 2. –

ответ

5

Это действительно реализация по умолчанию toString(). Однако java.lang.Enum, неявный базовый класс для всех enum s переопределяет toString(), возвращая его имя.

+1

Короткие и простые. Кроме того, не забудьте: http://stackoverflow.com/questions/13291076/java-enum-why-use-tostring-instead-of-name. – MordechayS

+0

Удивительный, спасибо! Это было очень быстро. –

+0

@MordechayS, этот пост был на самом деле оригинальным сообщением, которое послало меня вниз по кроличьей дыре, ища это. –

 Смежные вопросы

  • Нет связанных вопросов^_^