深度拷贝PK浅拷贝:分别是<对象的值和内容的复制><对象引用的复制,地址相同>
1.地址相同:
直接地址赋值
2.值相同:
i)循环赋值
ii)System.arraycopy(str,2,s,3,4);
ii)sourceArray.clone();
下面贴出对比的代码:
public class Copytest {
public static void main(String[] args) {
String[][] strArray=new String[][]{
{"a","b","c"},
{"A","B","C","D"},
{"1","2"}
};
repeatArray(strArray);
copyArray(strArray);
cloneArray(strArray);
shadowCopy(strArray);
}
public static void printArray(String[][] array){
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
}
public static void repeatArray(String[][] strArray){
String[][] copyArray=new String[strArray.length][];
for(int i=0;i<strArray.length;i++){
copyArray[i]=new String[strArray[i].length];
for(int j=0;j<strArray[i].length;j++){
copyArray[i][j]=strArray[i][j];
}
}
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");
}
public static void copyArray(String[][] strArray){
String[][] copyArray=new String[strArray.length][];
for(int i=0;i<strArray.length;i++){
copyArray[i]=new String[strArray[i].length];
System.arraycopy(strArray[i], 0, copyArray[i], 0, strArray[i].length);
}
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");
}
public static void cloneArray(String[][] strArray){
String[][] copyArray=new String[strArray.length][];
for(int i=0;i<strArray.length;i++){
copyArray[i]=strArray[i].clone();
}
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");
}
public static void shadowCopy(String [][] strArray){
String[][] copyArray=strArray;
printArray(copyArray);
System.out.println(strArray[0]==copyArray[0]?"浅拷贝":"深拷贝");
}
}