根据我对Java的理解(可以说很少= P),Java对待原始值的方式与对象不同。我能想到的一个例子是原语是通过值传递的,而对象是通过引用的值传递的。
扩展这个,我已经实现了创建int数组的代码,并将浅了它复制到一个新的int数组:
public class Test {
public static void main(String[] args){
int[] array = {2,3,4,5};
int[] copy = array;
copy[1] = 0;
for (int i : copy){
System.out.print(i);}
System.out.println();
for (int i : array){
System.out.print(i);}
}
}
然而,输出是:
2045
2045
那么,令我困惑的是为什么两个阵列都会改变?我想当我们制作原始数组的副本时,我们只复制了元素的值(因为我们处理的是原语)?
答案 0 :(得分:1)
你根本没有复制数组。你所做的是使引用array
和copy
指向内存中的相同数组。因此,当您通过一个引用更改数组时,另一个引用将指向相同的更改。
答案 1 :(得分:0)
数组是对象。当你设置
int[] copy = array;
copy
和array
都指向同一个对象。您的更新
copy[1] = 0;
更新“both”。
答案 2 :(得分:0)
当您完成赋值copy[1] = 0
时,您告诉Java采用copy
引用的数组,转到位置1,并赋值0.因为您还有以下语句
int[] copy = array;
然后copy
和array
引用内存中的相同数组。你从来没有真正做过浅拷贝,你只分配了另一个变量来指向同一个数组。
如果你想制作一个数组的副本,那么你可以尝试:
int[] copy = Arrays.copyOf(array, array.length);