Но как я могу распечатать адрес ссылки a?
Вы не можете, довольно просто. Спецификация JVM не определяет базовые свойства стека каким-либо образом и, строго говоря, по спецификации, нет гарантии, что у нее даже есть адрес памяти. На практике, в текущих реализациях, конечно, это так, но спецификация оставляет это неопределенным, и, следовательно, у Java нет интерфейса для изучения макета памяти стека.
Кроме того, следует отметить, что на переменную стека на самом деле не гарантируется наличие адреса памяти. Это не редкость для них полностью находиться в реестрах и никогда не сбрасываться в память.
Однако, следует также отметить, что, в отличие от того, что вы говорите, System.out.println(a)
будет не напечатать адрес объекта ссылается a
.То, что он печатает, также не определено спецификацией, но реализация Oracle выводит хэш-код идентификатора a
, а не его адрес. Адрес a
даже не гарантированно остается постоянным в течение всего срока его службы, так как GC может перемещать его.
исправить свой хэш-код "a" – Harshana