案例1,一维:
double[]vals = new double[4];
vals[0] = 1;
vals[1] = 123;
vals[2] = -1;
vals[3] = 2;
double[] vals4 = vals.clone();
double newval = 55;
vals[0] += newval;
for (int k=0;k<vals.length;k++){
System.out.println("k= " + vals[k]);
System.out.println("k= " + vals4[k]);
}
输出
k= 56.0
k= 1.0
k= 123.0
k= 123.0
k= -1.0
k= -1.0
k= 2.0
k= 2.0
案例2,二维:
double[][] vals3 = new double[][]{
{1,2},
{3,4}
};
double[][] vals2 = vals3.clone();
vals3[0][0] += 112;
for (int i=0;i<vals3.length;i++){
for (int j=0;j<vals3[0].length;j++){
System.out.println(vals2[i][j]);
System.out.println(vals3[i][j]);
}
}
输出
113.0
113.0
2.0
2.0
3.0
3.0
4.0
4.0
我使用相同的函数array.clone()
,但为什么数组元素在2-dim情况下改变,当我更改数组的输入时,但不是在1-dim情况下?
答案 0 :(得分:4)
Java只有单维数组。 double[][]
是对double[]
的引用数组,因此当您克隆引用数组时,您将获得另一个对相同底层数组的引用数组。
要进行深度克隆,您可以创建一个相同大小的新double [] []并克隆单个double [] s
e.g。
public static double[][] deepClone(double[][] d) {
double[][] ret = new double[d.length][];
for(int i = 0; i < ret.length; i++)
ret[i] = d[i].clone();
return ret;
}
答案 1 :(得分:1)
是的,因为array.clone()复制了引用,换句话说,数组克隆就是&#34;浅&#34;副本。