This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Call by reference not working Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Call by reference not working" Watch "Call by reference not working" New topic
Author

Call by reference not working

Bora Sabrioglu
Ranch Hand

Joined: Nov 19, 2012
Posts: 86
Hi ranchers,

if you declare and initialize an array in main and give it as a parameter over to another function 'reverse' and make it point there to another array... why does it still point to the original array once this function 'reverse' has finished?

Below is the code.

public static void main( String[] args )
{
double[] array = {1,2,3,4,5,6,7};
printArray( array );
reverse(array);
printArray( array );
}

public static void reverse( double[] array ) {
if ( array == null )
return;
double[] newArray = new double[array.length];
int i=array.length-1;
for(double item:array) {
newArray[i--]=item;
}
array=newArray;
}

public static void printArray(double[] array) {
for(double item: array) {
System.out.print(item + ", ");
}
System.out.println();
}

}

Output:

1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,
1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,

I'm giving the array variable which is declared in main over to another function (printArray).
There I'm making it point to another array declared there. When I'm back in main and print the contents of the array, it prints 1, 2, ...,7.

I'm not getting this. I would understand, if it would print nonsense stuff, because the newArray was declared in reverse and when reverse is finished, then newArray 'doesnt exist anymore'...so array would point to some non-defined memory-area.... but it prints 1, 2, ... , 7.... the values it was initialized with before reverse was called.

I know, the answer is probably very simple but I need some help right now...

Thanks in advance.

Steve Luke
Bartender

Joined: Jan 28, 2003
Posts: 4167
    
  21

Because Java never passes by reference, it only uses pass by value


Steve
Bora Sabrioglu
Ranch Hand

Joined: Nov 19, 2012
Posts: 86
Ah, ok... now I'm getting it...

You pass the reference as a 'value'... that means you can change the object the reference is referring to, but can't make the reference point to some other object...

If you write something like array[0]=123.456d in reverse the change can be seen in main as well...

Thanks...

(and I still have quite much to learn...)
Paul Clapham
Bartender

Joined: Oct 14, 2005
Posts: 18541
    
    8

Yes, you got it.
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: Call by reference not working
 
Similar Threads
reversing a string using recursion
Printing Int Array to File using PrintWriter
How to handle rows/columns in arrays
Problems with writing image on server side
Filling Array