你好。在方法中创建的对象会发生什么。这是一个例子:
public void example() {
Integer i = new Integer(4);
}
这里我们迫不及待地创建了一个Integer类型的对象,ok,但是现在我们已经完成了这个方法,这个对象之后会发生什么?它将简单地从堆栈中删除,如果没有比这个更多的链接到它,那么从堆中删除?
public class Variables {
public static Variables variables = new Variables();
private ArrayList<String> arrList = new ArrayList<>();
private Variables() {}
public ArrayList getArrList() {
return arrList;
}
}
public class Human {
private String name;
public Human(String name) {
this.name = name;
Variables.variables.getArrList().add(name);
}
public void setName(String name) {this.name = name;}
}
public class Main() {
public static void main(String[] args) {
Human human = new Human("Josh");
//Теперь у нас переменная стринг "Josh" хранится и в коллекции и в поле объекта human и нам чтобы удалить этого Джоша надо удалить этот объект из коллекции Variables.variables.getArrList().remove(0); и присвоить Null human.setName(null);
}
}
方法执行后,对象将被垃圾收集器删除,因为没有对它的引用,但不知道具体何时发生。您无法影响此过程,但您可以建议垃圾收集器删除不必要的对象,但是,它将决定哪些对象。这很简单——System.gc()。但我再说一遍,这只是一个建议,并不能保证在方法调用后该对象将被删除。
如果你这样写,它会有不同的含义:
因为在这种情况下,不会创建新对象,而是会为 i 分配对整数池中已经存在的对象的引用。垃圾收集器的工作更少