Можно ли найти адрес не примитивной переменной в Java? - PullRequest
2 голосов
/ 07 января 2012

Если Integer i = 88, какой адрес памяти у i?? 1003 *

Кроме того, если в составе отладчика изменяется число id, свидетельствует ли это о том, что был создан новый объект?

enter image description here

Ответы [ 3 ]

6 голосов
/ 07 января 2012

Зачем вам нужен адрес памяти любого объекта в Java?Все, что вы можете сказать, это то, что Integer экземпляр лежит в куче.Вы не можете найти точный адрес.

Второй вопрос: да, Integer объекты являются неизменными, поэтому, когда значение переменной типа Integer изменяется, это означает, что оно указывает на другой экземпляр Integer,Однако это не обязательно означает, что новый экземпляр был создан .new Integer(42) всегда создает новый экземпляр, в то время как Integer.valueOf(42) будет создавать один и тот же экземпляр каждый раз, когда он вызывается.

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

Ответ на ваш второй вопрос - да, «id», который вы видите в отладчике Eclipse, уникальным образом идентифицирует объект, и поэтому изменение в нем означает, что был создан новый объект.Так, например:

Integer i = 55;
Integer j = new Integer(55);
Integer k = Integer.valueOf(55);

Здесь i и k будут иметь одинаковые идентификаторы, поскольку они ссылаются на один и тот же объект;j будет другим.

Адрес памяти одного из этих объектов на самом деле не является полезной информацией, поскольку объекты перемещаются в памяти.Все, что вы можете знать, это то, что если я == k, это один и тот же объект.(Так вот, я == k, но я! = J).

0 голосов
/ 07 января 2012

Если у вас нет кого-то очень близкого от команды разработчиков JVM, вы не можете узнать, какой тип данных / адреса хранится в ссылочной переменной :).Все, что нам нужно, это получить доступ к объекту, находящемуся в этой ссылке, и манипулировать / выполнять его.

Я не уверен насчет второй части вашего вопроса.Кроме того, я не могу подтвердить, относится ли ID (в отладчике) к области памяти кучи Java.

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