/**
* 数组转字符串
* @param array
*/
public static String myToString(int[] array) {
String ret = "[";
for (int i = 0; i < array.length; i ++) {
ret += array[i];
if(i != array.length-1) {
ret += ",";
}
}
ret += "]";
return ret;
}
public static void main(String[] args) {
int[] array = {
1,2,3,4,5};
System.out.println(myToString(array));
} // [1,2,3,4,5]
第一种for循环拷贝:
public static void main3(String[] args) {
int[] array = {
1,2,3,4,5};
int[] ret = copyArray(array);
System.out.println(Arrays.toString(ret));
}
private static int[] copyArray(int[] array) {
int[] tmp = new int[array.length];
for(int i = 0; i < array.length; i++) {
tmp[i] = array[i];
}
return tmp;
}
第二种 copyof
/**
* 数组的拷贝
* Arrays.copyOf(int[] original, int newLength)
* original:要拷贝的数组
* newLength:拷贝后新的长度
*/
public static void main4(String[] args) {
int[] array = {
1,2,3,4,5};
int[] ret = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(ret));
}
第三种 arraycopy
/**
* public static native void arraycopy(Object src,int srcPos, Object dest, int destPos,int length);
* src:原来的数组
* srcPos:从原来的数组这个位置开始拷贝
* dest:拷贝后的数组
* destPos:拷贝的数组的开始位置
* length:拷贝的长度
* @param args
*/
public static void main6(String[]args){
int[] array = {
1,2,3,4,5};
int[] copy = new int[array.length];
System.arraycopy(array,0,copy,0,array.length);
System.out.println(Arrays.toString(copy));
}
第四种 clone
public static void main7(String[] args) {
int[] array = {
1,2,3,4,5};
//就是产生当前对象的一个副本
//clone这个方法是Object的方法-》类和对象之后
int[] ret = array.clone();
System.out.println(Arrays.toString(ret));
}
深浅拷贝
浅拷贝只传递了对象的地址(field1和field2地址一样),没有复制对象的值,所以它还是指向对象,会改变对象的值。
深拷贝来说,不仅要复制对象的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对象进行深拷贝要对整个对象图进行拷贝!
所以深拷贝不会改变原对象。
转载:https://blog.csdn.net/huangkechen/article/details/115547820
查看评论