【发布时间】:2016-03-10 07:31:02
【问题描述】:
假设我有代码:
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() 中创建的新对象的实时引用,因此该新对象不应在 instantiate() 完成后被垃圾回收,对吧?
我问是因为我正在做一个项目,在这个项目中,在一个类中声明一个对象并在另一个类的方法中实例化该对象是最有意义的。问题是,一旦实例化完成,对象仍然是 null。
【问题讨论】:
-
Java 是按值传递的,因此您不能像尝试那样修改
item参数的值。如果item包含对某个对象的非空引用,则可以修改该对象(如果它是可变的),但不能从ItemInstantiator#instantiate()中影响Foobar中item的值。如果这看起来不清楚,请阅读stackoverflow.com/q/40480/18157。这与对象生命周期无关。您创建了一个新对象并立即将其丢弃。
标签: java object scope lifetime