public void swap(Point var1, Point var2)
{
var1.x = 100;
var1.y = 100;
Point temp = var1;
var1 = var2;
var2 = temp;
}
public static void main(String [] args)
{
Point p1 = new Point(0,0);
Point p2 = new Point(0,0);
System.out.println("A: " + p1.x + " B: " +p1.y);
System.out.println("A: " + p2.x + " B: " +p2.y);
System.out.println(" ");
swap(p1,p2);
System.out.println("A: " + p1.x + " B:" + p1.y);
System.out.println("A: " + p2.x + " B: " +p2.y);
}
Running the code produces:
A: 0 B: 0
A: 0 B: 0
A: 100 B: 100
A: 0 B: 0
I understand how the function changes the value of p1 as it is passed-by-value.
What i dont get is why the swap of p1 and p2 failed.
Java is pass by value at all times. That’s the only mechanism for both primitives and objects.
The key is to know what’s passed for objects. It’s not the object itself; that lives out on the heap. It’s the reference to that object that’s passed by value.
You cannot modify a passed reference and return the new value to the caller, but you can modify the state of the object it refers to – if it’s mutable and exposes appropriate methods for you to call.
The class swap with pointers, similar to what’s possible with C, doesn’t work because you can’t change what the passed reference refers to and return the new values to the caller.