Picked the following up from a sun forum that clearly sums up the issue
There are two things that you need to understand : (i) the actual Java object is never passed - however the reference variable pointing to the object is passed. (ii) all passing in java is done by value.
What this means for objects is that the reference variable to the object is passed by value. However the passed reference variable still points to the same object.
So when you modify the object pointed to by the passed variable, you are modifying the original object. This means that the object behaves like it was passed by reference, when its reference variable was actually passed by value.
When some authors say the object is passed by reference they are talking about the object behaving as if it was passed by reference. Those who talk about passing by value are talking about the reference variable which points to the object.