Java does manipulate objects by reference, and all object variables are references. However, Java doesn't pass method arguments by reference; it passes them by value.
Take the
The method successfully alters the value of
Java copies and passes the reference by value, not the object. Thus, method manipulation will alter the objects, since the references point to the original objects. But since the references are copies, swaps will fail. Unfortunately, after a method call, you are left with only the unswapped original references. For a swap to succeed outside of the method call, we need to swap the original references, not the copies.
But still it is not impossible to write swap. See here for this.
Take the
badSwap()
method for example: public void badSwap(int var1, int var2)
{
int temp = var1;
var1 = var2;
var2 = temp;
}
public void badSwap2(Point arg1,Point arg2)
{
Point temp = arg1; arg1 = arg2; arg2 = temp; }
The method successfully alters the value of
pnt1
, even though it is passed by value; however, a swap of pnt1
and pnt2
fails! This is the major source of confusion. In the main()
method, pnt1
and pnt2
are nothing more than object references. When you pass pnt1
and pnt2
to the tricky()
method, Java passes the references by value just like any other parameter. This means the references passed to the method are actually copies of the original references. Java copies and passes the reference by value, not the object. Thus, method manipulation will alter the objects, since the references point to the original objects. But since the references are copies, swaps will fail. Unfortunately, after a method call, you are left with only the unswapped original references. For a swap to succeed outside of the method call, we need to swap the original references, not the copies.
No comments:
Post a Comment