Создайте новый Object () с результатом toString другого Object - PullRequest
2 голосов
/ 18 января 2012

Мне было интересно, можно ли получить какое-либо значение String объекта для доступа к этому объекту на той же машине (той же оперативной памяти) или той же виртуальной машине через эту конкретную строку.

, например

Object objA1 = new Object();
System.out.print(objA1.adress); => output: d146a6581ed9e
Object objExt = Object.buildFromMemoryAdress("d146a6581ed9e");

Надеюсь, вы понимаете, что я пытаюсь понять.

РЕДАКТИРОВАТЬ: я нашел в

http://javapapers.com/core-java/address-of-a-java-object/#&slider1=1

Класс, который позволяет мне получить строку логического адреса экземпляра в памяти (VM?): sun.misc.Unsafe

Я думаю, что я также могу использовать Unsafe для извлечения Объекта из памяти (ограниченной для ВМ?).

Если это невозможно, как бы я это сделал, и поскольку это из любопытства, есть ли другие языки (особенно высокого класса), которые разрешают прямой доступ к памяти, как этот?

Ответы [ 3 ]

5 голосов
/ 18 января 2012

Неправильно полагать, что число, которое вы видите в результате toString(), является адресом памяти.

На самом деле это хеш-код объекта. Если объект не изменен, его хеш-код остается постоянным. Однако его адрес памяти может измениться в любое время: компактный сборщик мусора может решить перемещать объект в памяти, когда ему это нравится.

3 голосов
/ 18 января 2012

Абсолютно нет.На самом деле это явно невозможно, учитывая, что вы можете иметь два разных объекта, чьи методы toString() возвращают одну и ту же строку.В качестве простого примера:

Integer a = new Integer(10);
Integer b = new Integer(10);

Object x = Object.buildFromToString("10");

Что должно означать x?Тот же объект, к которому относится a, или тот же объект, к которому относится b?

toString() равен не , предназначенный для возврата идентификатора объекта - он просто предназначен для возвратакакое-то текстовое представление объекта.То, что реализация по умолчанию возвращает что-то, похожее на идентификатор, не должно восприниматься как указание на то, что должно использоваться в качестве идентификатора.

Если вы хотите сохранить каким-либо образомдля доступа к объекту в другой момент времени, я предлагаю вам просто сохранить ссылку на него как Object переменную.

2 голосов
/ 18 января 2012

Нет, это невозможно. Объекты Java доступны только при наличии ссылки на эти объекты. Что вы можете сделать, это сохранить ваши объекты в Map<String, Object> под заданным именем и получить ссылку на объект из его имени, используя карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...