数组的拷贝
数组的拷贝共有4种方法:
for循环 clone() System.arraycopy() Arrays.copyof()
1:for循环:
--拷贝数值类型:
int[] array1 = {1,2,3};
int[] array2 = new int[3];
for (int i = 0; i < array1.length; i++) {
array2[i] = array1[i];
}
System.out.println("拷贝数值类型:");
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
System.out.println("--------------修改后--------------------");
array2[0] = 6;
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
--拷贝引用
public class Arraycopy {
public static void main(String[] args) {
TestArray[] arrays1 = new TestArray[4];
arrays1[0] = new TestArray(1);
arrays1[1] = new TestArray(2);
TestArray[] arrays2 = new TestArray[2];
for (int i = 0; i < arrays.length; i++) {
arrays2[i] = arrays1[i];
}
System.out.println("拷贝引用类型:");
show(arrays1);
show(arrays2);
System.out.println("--------------修改后--------------");
arrays2[1].setData(3);
show(arrays1);
show(arrays2);
}
public static void show(TestArray[] arrays) {
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays1[i].getData() + " ");
}
System.out.println();
}
}
class TestArray {
private int data;
public TestArray(int data) {
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
2:clone()
--拷贝数值类型:
int[] array1 = {1,2,3,4};
int[] array2 = new int[4];
array2 = array1.clone();
System.out.println("拷贝数值类型:");
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
System.out.println("--------------修改后--------------------");
array2[0] = 0;
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
--拷贝引用
TestArray[] arrays1 = new TestArray[4];
arrays1[0] = new TestArray(1);
arrays1[1] = new TestArray(2);
arrays1[2] = new TestArray(3);
arrays1[3] = new TestArray(4);
TestArray[] arrays2 = new TestArray[4];
arrays2 = arrays.clone();
System.out.println("拷贝引用类型:");
show(arrays);
show(arrays2);
System.out.println("--------------修改后---------------");
arrays2[0].setData(0);
show(arrays1);
show(arrays2);
3:System.arraycopy()
--拷贝数值类型
int[] array1 = {1,2,3,4,5};
int[] array2 = new int[5];
System.arraycopy(array1,0,array2,0,array1.length);
System.out.println("拷贝数值类型:");
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
System.out.println("--------------修改后--------------------");
array2[0] = 0;
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
--拷贝引用
TestArray[] arrays2 = new TestArray[arrays.length];
System.arraycopy(arrays,0,arrays2,0,arrays.length);
4.Arrays.copyof():
--拷贝数值类型
int[] array1 = {1,2,3,4,5,6};
int[] array2 = new int[6];
array2 = Arrays.copyOf(array1,array1.length);
--拷贝引用
TestArray[] arrays2 = new TestArray[4];
arrays2 = Arrays.copyOf(arrays1,arrays1.length);
二维数组的拷贝也是相同的方法,只要在每种方式的拷贝前加for循环(for (int i = 0; i < arrays.length; i++) )即可。