【发布时间】:2014-09-25 03:37:35
【问题描述】:
我想“删除”数组的某些元素,当我将它们设置为 null 时,这些元素在我尝试打印它时没有出现,它们是被“垃圾收集器删除”还是 println 方法忽略了空值?例如:
this.E = new String[3];
E[0]="blue";
E[1]="red";
E[1]="gray";
this.E[0] = null;
for(int i = 0 ; i < E.length ; i++)
System.out.println(E[i]);
该代码只输出红色和灰色,所以蓝色被释放内存或空值被忽略,因为它不代表任何东西?
【问题讨论】:
-
能否请您在此处输入一些代码并更详细地说明您的问题?
-
我不确定问题是什么。 Null 为空。
-
当我尝试打印空值时,它会输出“空值”。您能否显示重现此代码的代码(尽管对于您的问题,空值相当于什么都没有,它们不是垃圾收集)
-
不,如果该元素在一个已分配的数组中并且只要程序正在运行,它们就不会被 GC 忽略。 System.out.println 也不会忽略数组元素的空值,并且应该打印空字符串。
-
如果这是对它的唯一引用,那么此时它通常符合 GC 条件。但是您所看到的与 GC 无关。您的问题与
null有关,因为E[0]不再引用字符串“blue”。这忽略了 JVM 可能对字符串“blue”执行的优化 - 字符串实习或字符串池等
标签: java memory-management garbage-collection