clone()方法

Posted yudongxuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了clone()方法相关的知识,希望对你有一定的参考价值。

1.clone方法可以克隆所指类型中的内容,并指向一个跟被克隆一样的东西。比如说int arr[] ={1 , 2 ,3},使用克隆方法int cloneArr[] =arr.clone(),这时cloneArr就指向了一个新的有三个空间的数组,跟被克隆的arr所指的数组类型及内容一致。

技术图片

克隆是对内容进行了复制,但是克隆后指向的是新的数组,不是原来的arr数组,所以对arr和cloneArr是不同的操作。

2.当对类类型的数组进行克隆时,比如有个Test类,类里只有value; Test[] arr = new Test[2],arr[1] = new Test(),现在arr指向了两个类,并对数组中的第二个位置创建了Test类对象,并给这个对象赋值arr[1].value = 123,这时情况如图

技术图片

现在开始克隆,Test[] cloneArr = arr.clone(),这时也指向了类数组,数组里的内容和arr的一样,只是内容一样,arr和cloneArr指的不同,只是内容一样,这时克隆的情况如图

技术图片

发现cloneArr[1]所指的和arr[1]所指的一样,因为克隆时把被克隆的内容都拿过来了,所以指向相同,这时如果让cloneArr[1] = new Test(),这样就各指各的了,此时情况如图

技术图片

3.二维数组时也是同理,克隆后会把地址也克隆过来,所以会指向同一地方,int[][] arr = new int[2][3],int[][] cloneArr = arr.clone();这时情况如图:

技术图片

先给arr[1][2]进行赋值,然后继续克隆,cloneArr[1] = arr[1].clone;这时会把内容赋值过来,但是不在指向原处,此时情况如图:

技术图片

以上是关于clone()方法的主要内容,如果未能解决你的问题,请参考以下文章

Clone

Clone()方法详解

java克隆clone()方法和相等equals()方法的重写

c# Clone方法

为什么无法在Main方法中调用外部类的clone方法?

clone()方法