Новая ссылка создается JVM, когда мы обращаемся к переменной экземпляра? - PullRequest
0 голосов
/ 24 октября 2019

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

public class Test {

    public Test2 t1= new Test2();

}

public class Test2 {


}


Test obj = new Test();

Создает ли строка ниже новую ссылку в памяти:когда мы получаем доступ к obj.t1?

System.out.println(obj.t1==null)

1 Ответ

0 голосов
/ 25 октября 2019

Вы должны учитывать порядок событий в вашем примере.

Вы создаете экземпляр экземпляра Test и присваиваете его эталонному объекту. В вашем примере, t1 является переменной экземпляра Test, поэтому пространство выделяется в куче для экземпляра Test2 одновременно с созданием объекта obj. Чистый эффект заключается в том, что при назначении obj выделяется все пространство кучи.

Когда вы вызываете println, вы используете существующую ссылку на obj, поэтому не происходит выделения ни для obj, ни для ссылки t1 через нее.

...