Java is NEVER pass-by-reference, right?…right? [duplicate]

As Rytmis said, Java passes references by value. What this means is that you can legitimately call mutating methods on the parameters of a method, but you cannot reassign them and expect the value to propagate.


private void goodChangeDog(Dog dog) {
    dog.setColor(Color.BLACK); // works as expected!
private void badChangeDog(Dog dog) {
    dog = new StBernard(); // compiles, but has no effect outside the method

Edit: What this means in this case is that although voiceSetList might change as a result of this method (it could have a new element added to it), the changes to vsName will not be visible outside of the method. To prevent confusion, I often mark my method parameters final, which keeps them from being reassigned (accidentally or not) inside the method. This would keep the second example from compiling at all.

Leave a Comment