• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Cloning 1D and 2D array

 
Greenhorn
Posts: 8
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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.

 
Ranch Hand
Posts: 2908
1
Spring Java Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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'
 
Marshal
Posts: 79261
377
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • 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.
reply
    Bookmark Topic Watch Topic
  • New Topic