我有这段代码,我想知道为什么(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
答案 0 :(得分:0)
设置a = b
后,它们都指向相同的数据。因此,如果您更改一个,就更改另一个。它们本质上是同一件事。
答案 1 :(得分:0)
不特定于数组。这就是Java中对象分配的工作方式。
您为变量a
分配的引用与此处的变量b
相同:
a = b;
因此,a
和b
变量在此语句之后引用同一对象。
要使a
和b
引用两个不同的对象,必须复制它们的值。
对于布尔数组(不可变):一种进行浅表复制的clone()
方法是一种方法。
a = b.clone();
答案 2 :(得分:0)
答案简短,是的,因为有指针
您首先创建两个数组,然后给它们两个指针a和b,每个数组一个。 当您现在执行a = b时,您的'a'指针具有相同的b值,因此它们都指向第二个数组,因此a和b现在都是同一对象。
这也意味着您不能再更改第一个数组,因为没有指针指向它,并且应该释放数组内存
答案 3 :(得分:0)
原因是指针。变量a和b指向相同位置,因为
a = b;
此代码之后,a指向与b相同的内存地址。并且所有更改和结果将相同。