两种情况:1.基本类型的数组copy 2.对象类型的数组copy
对于数组的copy主要有两种方式:
1.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
2.Arrays.copyOf(int[] original, int newLength);
一.基本类型的数组copy
例如:
输出结果为:
[quote]
[1, 5, 7, 2, 0, 0, 0, 0, 0, 0, 0]
[/quote]
然后我们改变源数据某个元素的值并且在此输出目标数组
输出结果与原来的一样。
说明:基本类型的数组copy是深copy.
二.对象类型的数组copy.
1.首先我们定义一个对象Point.
2.数组的copy
输出的结果为:
[quote]
[1:1, 2:2, 3:3]
[10:10, 2:2, 3:3]
[/quote]
这说明两个数组里面的元素都是指向同一个Point对象的应用,当我们改变Point对象时,两个数组里面的元素也相应发生改变。
然后我们把代码改成下面的形式:
这次输出结果却为:
说明数组的copy是深copy,对象的copy是浅copy
对于数组的copy主要有两种方式:
1.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
2.Arrays.copyOf(int[] original, int newLength);
一.基本类型的数组copy
例如:
int[] a = {1,5,7,2};
int[] b = new int[11];
System.arraycopy(a, 0, b, 0, a.length);
System.out.println(Arrays.toString(b));
输出结果为:
[quote]
[1, 5, 7, 2, 0, 0, 0, 0, 0, 0, 0]
[/quote]
然后我们改变源数据某个元素的值并且在此输出目标数组
a[1]=8;
System.out.println(Arrays.toString(b));
输出结果与原来的一样。
说明:基本类型的数组copy是深copy.
二.对象类型的数组copy.
1.首先我们定义一个对象Point.
public class Point {
private int x;
private int y;
//省略geteer,seteer
。。。。。
}
2.数组的copy
Point[] p = {new Point(1,1),new Point(2,2),new Point(3,3)};
Point[] cp = new Point[3];
System.arraycopy(p, 0, cp, 0, p.length);
System.out.println(Arrays.toString(cp));
p[0].setX(10);
p[0].setY(10);
System.out.println(Arrays.toString(cp));
输出的结果为:
[quote]
[1:1, 2:2, 3:3]
[10:10, 2:2, 3:3]
[/quote]
这说明两个数组里面的元素都是指向同一个Point对象的应用,当我们改变Point对象时,两个数组里面的元素也相应发生改变。
然后我们把代码改成下面的形式:
Point[] p = {new Point(1,1),new Point(2,2),new Point(3,3)};
Point[] cp = new Point[3];
System.arraycopy(p, 0, cp, 0, p.length);
System.out.println(Arrays.toString(cp));
p[0] = new Point(5,5);
System.out.println(Arrays.toString(cp));
这次输出结果却为:
[1:1, 2:2, 3:3]
[1:1, 2:2, 3:3]
说明数组的copy是深copy,对象的copy是浅copy