Reputation: 6040
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.
Upvotes: 0
Views: 592
Reputation: 308753
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.
Upvotes: 4
Reputation: 91912
Objects are assigned by reference, not cloned, but the arguments stay as references to the actual objects, they will not turn into "references to references".
What I mean is that var1
reference the same object as p1
initially, but then you change var1
to reference another object. This does not affect what object p1
references because var1
is NOT a reference to p1
, only a reference to the same object as p1
is referencing.
Upvotes: 0
Reputation: 74036
myFunction()
just swaps the references to both objects inside the function (which are distinct from those outside), but does not swap the references outside the function nor the object instances themselves!
Upvotes: 3
Reputation: 240870
There would be a copy of reference generated in formal argument place, So there would be a new reference pointing to instances of Point
Upvotes: 2