布尔引用为空

2022-09-04 05:32:20

任何人都可以解释为什么这个代码导致下面的输出?

@Test
public void testBooleanArray() {
    Boolean[] ab = new Boolean[]{a, b};

    a = new Boolean(true);
    b = new Boolean(false);

    for(Boolean x : ab) {
        System.out.println(x);
    }
}

结果:

null
null

数组 ab 是否不保存指向对象 a 和对象 b 的指针,因此输出:

true
false

答案 1
a = new Boolean(true);
b = new Boolean(false);

这不会更改 a 和 b 指向的对象(数组中的元素)。它将它们指向对象。new

它不是在修改数组

举个例子:

Boolean a = new Boolean(true);
Boolean b = new Boolean(false);
Boolean c = a;
Boolean d = b;
a = new Boolean(false);
b = new Boolean(true);

c 和 d 仍将分别为真/假。这与数组发生的情况相同,只是数组引用的命名方式不同。


答案 2

在分配布尔值之前,必须对其进行初始化。

Boolean[] ab = new Boolean[]{a, b};

a = new Boolean(true);
b = new Boolean(false);

a = new Boolean(true);
b = new Boolean(false);

Boolean[] ab = new Boolean[]{a, b};

这是在使用Objectes之前,您复制对该对象的引用,并使用new语句创建一个新对象,第一个a,b在赋值时为空。