Идентификатор объекта Java в jvm - PullRequest
33 голосов
/ 20 июля 2010

Во время отладки в Eclipse рядом со значением объекта отображается идентификатор объекта.

Например: 28332 - это идентификатор объекта сеанса. Другой пример: waiting for: (id=101) отображается на панели «Отладка». Эти идентификаторы не являются ни хеш-кодом, ни System.identityHashCode.

Кто-нибудь знает - как получить this идентификатор объекта?

1 Ответ

27 голосов
/ 20 июля 2010

Я предполагаю, что у них есть внутреннее значение IdentityHashMap<Object, Integer>, присваивающее уникальное (но бессмысленное в противном случае) целое число для объекта.Это должно быть внутренним для отладчика Eclipse (не специальный идентификатор, который имеют объекты).Вы спрашиваете, как это сделать?

Редактировать : я бы настроил точку останова следующим образом (заметьте, я не очень хорошо разбираюсь в Eclipse):

  • У меня была бы начальная точка останова (например,тот, который вы использовали, чтобы сделать скриншот), и распечатать System.identityHashCode(object) объекта, который меня интересует.
  • Тогда я бы создал точку останова, используя условие System.identityHashCode(object) == <whatever number you saw at the previous step>.Это было бы очень редко для того, чтобы остановиться на неправильном объекте.

Или, если интересующий вас объект имеет подходящее представление toString(), которое вы можете использовать, вы также можете попробовать это вместо System.identityHashCode(object).В любом случае вам не нужно полагаться на внутренний идентификатор объекта Eclipse, а захватить такой id (или почти), который вы можете получить из самого объекта.

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