Скажем, у меня есть код:Java Время жизни объекта приведены ссылки из аргумента
class Foobar {
Object item = null;
ItemInstantiator inst = new ItemInstantiator();
public instantiateItem() {
inst.instantiate(item);
}
}
class ItemInstantiator {
public instantiate(Object item) {
item = new Object();
}
}
Поскольку класс Foobar имеет прямую ссылку на новый объект, созданный в Instantiate(), что новый объект не должен быть мусора после экземпляра() заканчивается, не так ли?
Я спрашиваю, потому что я работаю над проектом, где имеет смысл объявить объект в одном классе и создать экземпляр объекта в методе другого класса. Проблема заключается в том, что после завершения создания объекта объект все еще равен нулю.
Java является передачей по значению, поэтому вы не можете изменить значение аргумента 'item', как вы пытаетесь сделать. Если 'item' содержит ненулевую ссылку на какой-либо объект, вы можете изменить этот объект, если он был изменен, но вы не можете повлиять на значение' item' в 'Foobar' из' ItemInstantiator # instantiate() '. Если это неясно, прочитайте http://stackoverflow.com/q/40480/18157. Это не имеет ничего общего с временем жизни объекта. Вы создали новый объект и сразу же отбросили его. –