File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
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
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Call by reference not working" Watch "Call by reference not working" New topic

Call by reference not working

Bora Sabrioglu
Ranch Hand

Joined: Nov 19, 2012
Posts: 100
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 );
printArray( array );

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

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



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' 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

Joined: Jan 28, 2003
Posts: 4181

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

Bora Sabrioglu
Ranch Hand

Joined: Nov 19, 2012
Posts: 100
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...


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

Joined: Oct 14, 2005
Posts: 19973

Yes, you got it.
I agree. Here's the link:
subject: Call by reference not working
It's not a secret anymore!