Пожалуйста, посмотрите на картинку ниже. Когда мы создаем объект в Java с new
ключевым словом, мы получаем адрес памяти из ОС.
Когда мы пишем, out.println(objName)
мы можем видеть «специальную» строку в качестве вывода. Мои вопросы:
- Что это за выход?
Если это адрес памяти, который нам предоставляет ОС:
а) Как я могу преобразовать эту строку в двоичный файл?
б) Как я могу получить один адрес целочисленных переменных?
Ответы:
Это имя класса и System.identityHashCode (), разделенные символом «@». То, что представляет собой идентификационный хеш-код, зависит от реализации. Часто это начальный адрес памяти объекта, но со временем объект может быть перемещен в память виртуальной машиной. Так что (кратко) вы не можете полагаться на то, что это что-то.
Получение адресов памяти переменных не имеет смысла в Java, так как JVM может свободно реализовывать объекты и перемещать их так, как кажется (ваши объекты могут / будут перемещаться во время сбора мусора и т. Д.)
Integer.toBinaryString () даст вам целое число в двоичной форме.
источник
identityHashcode
это не бессмысленно, это просто не надежно. :)Это возможно с помощью
sun.misc.Unsafe
: см. Этот замечательный ответ от @Peter Lawrey -> Есть ли способ получить ссылочный адрес?Используя его код для printAddresses ():
Я настроил этот тест:
Вот вывод:
Вывод :
источник
Это результат реализации объекта toString (). Если ваш класс переопределяет toString (), он напечатает что-то совершенно другое.
источник
Это не адрес памяти Это имя класса @ hashcode
где
имя класса = полное имя или абсолютное имя (т.е. имя пакета, за которым следует имя класса)
hashcode = шестнадцатеричный формат (System.identityHashCode (obj) или obj.hashCode () даст вам хеш-код в десятичном формате)
источник
Как сказал Сунил, это не адрес памяти. Это просто хеш-код
Чтобы получить тот же @ контент, вы можете:
Если hashCode не переопределен в этом классе:
Если hashCode переопределен, вы получите исходное значение с помощью:
Это часто путают с адресом памяти, потому что если вы не переопределите hashCode (), адрес памяти используется для вычисления хеша.
источник
То, что вы получаете, является результатом метода toString () класса Object или, точнее, identityHashCode (), как указал uzay95.
«Когда мы создаем объект в Java с новым ключевым словом, мы получаем адрес памяти из ОС».
Важно понимать, что все, что вы делаете в Java, обрабатывается виртуальной машиной Java. Именно JVM предоставляет эту информацию. Что на самом деле происходит в оперативной памяти хост-операционной системы, полностью зависит от реализации JRE.
источник
это полезно знать о хэш-коде в Java:
http://eclipsesource.com/blogs/2012/09/04/the-3-things-you-should-know-about-hashcode/
источник
В Java, когда вы создаете объект из класса like
Person p = new Person();
,p
на самом деле это адрес ячейки памяти, который указывает на типPerson
.При использовании Statemenet для печати
p
вы увидите адрес.new
Ключевое слово делает новую память , содержащую все переменные экземпляра и методы , которые включены вclass Person
иp
является базовой переменной указывает на эту ячейку памяти.источник