wood burning stoves 2.0*
The moose likes Java in General and the fly likes Passing Array Parameters Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Passing Array Parameters" Watch "Passing Array Parameters" New topic
Author

Passing Array Parameters

Micho Lee
Greenhorn

Joined: Oct 21, 2003
Posts: 14
I know that when an array is passed to a class or method the value of its reference is sent. Hence when I pass an array to a new class/object I created and that object performs operations on that array, the values are changed in the original array. How do I pass an array so that the object creates a local copy and the original isn't altered by the new object/class/method?

ex.

private int naPoo[][] = null;

foo(int[][] p_naPoo)
{
naPoo = p_naPoo;
naPoo[1][1] = 69;
}

main()
{
int naPooOrig[][] = new int[2][2];
naPooOrig[1][1] = 77;
foo objFoo = new foo(naPooOrig);
System.out.println(naPooOrig[1][1]);
}

this will give output of 69. I don't want this. I want to pass the array but not have it altered by the receiving object or method.

I tried using:

naPoo = (int[][]) p_naPoo.clone();

but that doesn't work... same result. Any help would be much appreciated.
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by Micho Lee:

I tried using:

naPoo = (int[][]) p_naPoo.clone();

but that doesn't work... same result. Any help would be much appreciated.


Yes, it worked - just not the way you expected...

The problem is that you don't just have an array, but that you have an array of arrays. What you cloned was just the outer array - the clone still referenced the same inner arrays. What you need to do is to clone those, too. Unfortunately, to my knowledge there is no shortcut to do that...


The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
Micho Lee
Greenhorn

Joined: Oct 21, 2003
Posts: 14
So I'm guessing I just have to manually copy any multi-dimentional arrays that are passed if I don't want any references to the original?

For now that's what I did but I wish there were some shortcut.

BTW thanks for the reply.
Paul Clapham
Bartender

Joined: Oct 14, 2005
Posts: 18570
    
    8

I don't know if you'd call it a shortcut, but putting your data in some kind of immutable class that you designed for the purpose might make more sense than struggling against the capabilities of arrays.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
 
subject: Passing Array Parameters