Нет, это шестнадцатеричное число не должно интерпретироваться как адрес памяти, где находится объект. Фактически это хеш-код объекта. Документация API Object.toString()
гласит:
Метод toString для класса Object возвращает строку, состоящую из имени класса, экземпляром которого является объект, символа знака «@» и шестнадцатеричного представления без знака хеш-кода объекта. Другими словами, этот метод возвращает строку, равную значению:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Документация API java.lang.Object.hashCode()
гласит:
Насколько это практически целесообразно, метод hashCode, определенный классом Object, возвращает разные целые числа для разных объектов. (Это обычно реализуется путем преобразования внутреннего адреса объекта в целое число, но этот метод реализации не требуется языком программирования JavaTM.)
Так что для JVM от Sun, если вы не переопределите метод hashCode()
, то это действительно адрес памяти объекта, но нет никакой гарантии, что это так, поэтому вы не должны зависеть от него. 1019 *
Нет (реального, надежного) способа (работающего на любой JVM) получить адрес памяти объекта в чистой Java; В Java нет указателей, и ссылки не совпадают с указателями.
Раздел 4.3.2 Спецификации виртуальной машины Java объясняет, что означает [I
; в этом случае это означает, что ваша переменная является массивом int
.