在将引用变量重新分配给新对象之前,将其重新分配为null是否会释放它用来保存的旧内存,或者这是垃圾回收器的工作?
Dog obj = new Dog("d1");
if(obj!=null)
obj = null; // will this release the memory?
obj = new Dog("d2");
或
Dog obj = new Dog("d1");
obj = new Dog("d2");
不,它不是强制性的,事实上也没有做任何有用的事情。
将null
分配给一个变量本身永远不会释放内存。它最多删除一个保持对象可访问性的引用,如果它是最后一个引用,那么该对象最终可能会被垃圾回收。
但是,将任何其他引用分配给该变量也会起到同样的作用(即删除对原始对象的引用(,因此在重新分配之前将null
分配给它是不必要的步骤。
您不必这么做!垃圾收集器将以任何一种方式回收内存。
即以下内容就足够了:
Dog obj = new Dog("d1");
obj = new Dog("d2");