设置后,Java数组引用为null

时间:2014-11-11 14:54:11

标签: java

public abstract class Class1 {
    protected static Object object1 = null;
    protected static Object object2 = null;

    public static Object[] objects = { object1, object2 };

    public static void main(String[] args) {
        new Class2();

        for (Object o : objects) {
            System.out.println(o);
        }
    }
}

public class Class2 extends Class1 {
    public Class2() {
        Class1.object1 = new String("String 1");
        Class1.object2 = new String("String 2");
    }
}

输出:

null
null

为什么?

当我创建Class2的新实例时,该类的构造函数会初始化object1object2

据我所知,

objects包含对这些对象的引用。因此,在他们初始化之后,我期待任何东西,但是无效。

有人可以解释一下吗?感谢。

2 个答案:

答案 0 :(得分:5)

object不包含对这些object1object2的引用,但包含复制的引用到这些对象。

如果你这样做:

public static Object[] objects;

public static void main(String[] args) {
    new Class2();

    objects = { object1, object2 };
    for (Object o : objects) {
        System.out.println(o);
    }
}

即。在初始化objectobject1之后初始化object2,您将在数组中拥有非空的副本。

答案 1 :(得分:3)

首先实现对象的实现

protected static Object object1 = null;
protected static Object object2 = null;

object1object2设为null - 参考。

然后这个

objects = { object1, object2 };

object1object2包含的引用复制到objects[0]objects[1]

然后在这里

    Class1.object1 = new String("String 1");
    Class1.object2 = new String("String 2");

您创建了新的String - 存储在object1object2中的引用 - 但objects[0]objects[1]中的副本不受影响。