File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
Win a copy of Clojure in Action this week in the Clojure forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Passing Array Parameters

 
Micho Lee
Greenhorn
Posts: 14
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Posts: 14112
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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...
 
Micho Lee
Greenhorn
Posts: 14
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Sheriff
Pie
Posts: 20188
26
MySQL Database
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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.
 
I agree. Here's the link: http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic