我对以下代码有疑问。
class MemArr{
int[] mem = {1,2};
}
public class Test{
public static void main(String[] args){
MemArr[] x = new MemArr[2]; //line 1
x[0] = new MemArr(); //line 2
x[1] = null; //line 3
//line 4
}
}
到达第1行时,总共创建了多少个对象,并且有多少对象可以进行垃圾回收?
我认为,在第1行,创建了5个对象(1个数组x,2个
MemArr
对象在数组x中,2个整数数组的成员变量用于MemArr对象)在第2行,创建了两个对象(一个
MemArr
对象及其成员变量mem
)。在第3行中,当
x[1]
设置为null时,我认为总共有4个对象适合使用GC,但是对此我不太确定。 最佳答案
MemArr[] x = new MemArr[2];
这将创建一个新的由2个元素组成的
MemArr
数组,但不会初始化这2个元素中的任何一个。在声明之后,x[0]
和x[1]
都是null
:实例化了数组,但没有实例化它的内容。x[0] = new MemArr();
这实际上为数组的第一个元素分配了一个新的
MemArr
。因此,它将为其包含的内部MemArr
创建一个int[] mem
和另一个数组。x[1] = null;
这条线什么也没做。如前所述,该值已经是
null
。