Wednesday, March 30, 2011

Arrays: Copy vs. Clone

Occasionally when working with an array is may be useful to make a copy of that array. What might not be apparent is that by making a copy of an an array there are implications that can cause unintended side-effects if one isn’t aware of what actually happens when a simple copy the array is made.

For instance let’s consider:

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

int [] numbersCopy = numbers;

The “numbersCopy” array now contains the same values, but more importantly the array object itself points to the same object reference as the “numbers” array.

So if I were to do something like:

numbersCopy[2] = 0;

What would be the output for the following statements?

System.out.println(numbers[2]);

System.out.println(numbersCopy[2]);

Considering both arrays point to the same reference we would get:

0

0

for an output.

But what if we want to make a distinct copy of the first array with its own reference? Well in that case we would want to clone the array. In doing so each array will now have its own object reference. Let’s see how that will work.

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

int [] numbersClone = (int[])numbers.clone();

The “numbersClone” array now contains the same values, but in this case the array object itself points a different reference than the “numbers” array.

So if I were to do something like:

numbersClone[2] = 0;

What would be the output now for the following statements?

System.out.println(numbers[2]);

System.out.println(numbersClone[2]);

You guessed it:

4

0

123passportphoto is a very easy to use passport photo website that provides six enhanced photos. I have never had an issue while using this ...