• Post Reply Bookmark Topic Watch Topic
  • New Topic

Cloning 1D and 2D array  RSS feed

 
Vanitha Anandan
Greenhorn
Posts: 8
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
While cloning 2D array the references changes the value of the original object when the clone contents are changed. But the case is not true for 1D array.

int [] data1= {1,2,3,4};

int [] copy1 = (int[])data1.clone();

copy1[0]=99;

System.out.println("data1[0]="+data1[0]);//no change in data1[0][0] it is still 1


int[][] data = {{1,2,3}, {4,5}};

int[][] copy = (int[][]) data.clone();

copy[0][0] = 99; // This changes data[0][0] too! ---y???

Could anyone please help me in understanding this.

 
Sagar Rohankar
Ranch Hand
Posts: 2907
1
Java Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I think, this is because of the "shallow copying" technique while cloning.
This is what Java docs say regarding Object#clone() method:
The method clone for class Object performs a specific cloning operation. First, if the class of this object does not implement the interface Cloneable, then a CloneNotSupportedException is thrown. Note that all arrays are considered to implement the interface Cloneable. Otherwise, this method creates a new instance of the class of this object and initializes all its fields with exactly the contents of the corresponding fields of this object, as if by assignment; the contents of the fields are not themselves cloned. Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.


So, when you clone 2D array, all the internal primitive variables copy dosen't get created, but only upper layer 2 single dimension array is get copied.

i.e, This code will work and won't change the 'data'
 
Campbell Ritchie
Marshal
Posts: 56596
172
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You would have to iterate through the new array and replace every element by a clone of itself. Remember the contained objects are not clones of themselves.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!