两个数组之间的相等性

时间:2019-04-28 12:45:27

标签: java arrays

我有这段代码,我想知道为什么(a)数组更改时另一个数组会更改两个是因为指针?

Boolean[] a= {false,false};
Boolean[] b = {false,false};
a = b;
a[0] = true;
b[1] = true;

System.out.println(a[0] +" "+ b[0]);
System.out.println(a[1] +" "+ b[1]);

输出:

true true
true true

4 个答案:

答案 0 :(得分:0)

设置a = b后,它们都指向相同的数据。因此,如果您更改一个,就更改另一个。它们本质上是同一件事。

答案 1 :(得分:0)

不特定于数组。这就是Java中对象分配的工作方式。
您为变量a分配的引用与此处的变量b相同:

a = b;

因此,ab变量在此语句之后引用同一对象。

要使ab引用两个不同的对象,必须复制它们的值。
对于布尔数组(不可变):一种进行浅表复制的clone()方法是一种方法。

a = b.clone();

答案 2 :(得分:0)

答案简短,是的,因为有指针

您首先创建两个数组,然后给它们两个指针a和b,每个数组一个。 当您现在执行a = b时,您的'a'指针具有相同的b值,因此它们都指向第二个数组,因此a和b现在都是同一对象。

这也意味着您不能再更改第一个数组,因为没有指针指向它,并且应该释放数组内存

答案 3 :(得分:0)

原因是指针。变量a和b指向相同位置,因为

a = b;

此代码之后,a指向与b相同的内存地址。并且所有更改和结果将相同。