2013-09-03 17 views
1

У меня есть объект, Мутация, что у меня есть «новое» издание. Но когда он печатает с помощью toString(), объект говорит Mutation @ 0. Мне это не кажется хорошим. Что это может означать?Что это означает, когда адрес jvm объекта равен 0?

+0

«0» не является адресом. Это hashCode(), который имеет мало общего с адресом, отличным от аналогичного, потому что он находится в шестнадцатеричном виде. Даже Object.hashCode() - это значение, хранящееся в заголовке, которое не изменяется даже тогда, когда объект перемещается между поколениями (и, следовательно, имеет другой адрес памяти) –

ответ

1

Если вы посмотрите на исходный код Mutation, хороший шанс вы найдете это там:

@Override public int hashCode() { 
    //TODO: implement this properly! 
    return 0; 
} 

Реализация по умолчанию toString() просто сообщает этот факт что hashCode возвращен 0.

+0

Мутация - это собственный объект OP Я думаю. Если я ошибаюсь, Можете ли вы приложить эту ссылку API? –

+0

@ sᴜʀᴇsʜᴀᴛᴛᴀ Да, я предполагаю, что это его собственный класс. Пункт моего ответа указывает на источник проблемы. –

+0

+1 .Ah..That Исходный кодовый термин загнал меня в сумасшедший, и мне сразу захотелось увидеть API :) –

3

То есть без знака шестнадцатеричного представления

As per Docs of toString() method in Object class

Метод ToString для класса Object возвращает строку, состоящую из имени класса из которого объект является экземпляром, на-знака символ ` @ 'и шестнадцатеричное представление без знака хеш-кода объекта. Другими словами, этот метод возвращает строку, равную значению:

Это zero в смысле Hashcode еще не рассчитан.

Source Code:

public String toString() { 
237  return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
238 }