2016-09-26 4 views
0

У меня есть этот кодПочему hashCode() дает разные выходные данные для одного и того же объекта в java?

class A 
{ 
public static void main(String reds[]) 
    { 
    A ob=new A(); 
    System.out.println("Object "+ob); 
    System.out.println("HashCode "+ob.hashCode()); 
    } 
} 

результат: Output image

Выход для выше код дает другое значение большую часть времени. Кроме того, в приведенной ниже ссылке упоминается, что печать ссылочной переменной печатает ClassName @ hashcode.

printing reference variable is not printing the object's address

Однако выход для справки печати varibale отличается от хэш-код(). Что на самом деле происходит?

Просто хотел очистить мои концепции hashcode в java.

ответ

2

При вызове println() на вашем объекте (типа A), он печатает getClass().getName() + "@" + Integer.toHexString(hashCode()) (что реализация по умолчанию toString() в классе Object) т.е., он преобразует хэш-код в шестнадцатеричной . Если вы сделаете то же самое для своего хэш-кода (при печати), вы получите то же значение.

Если ваш класс переопределяет toString, он будет распечатан.

+0

Кроме того, непосредственно печать объекта с использованием функции println() вызывает метод toString(), который выполняет упомянутые задачи. –

+1

@ПрасадКаркар - Да. Он вызывает 'Object's toString', если ваш класс (или любой из его прямых родителей) не переопределяет' toString() ' – TheLostMind

+0

Он печатает результат вызова' A.toString() ', что бы это ни было. В этом случае он не был переопределен, поэтому он напечатал результат 'Object.toString()'. Ничто из этого поведения не связано с 'println()'. – EJP

0

Object.toString() использует хэш-код в шестнадцатеричном формате. Вы печатаете его самостоятельно в десятичной форме.

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