Java Pass by Value or Pass by Reference
Java always passes arguments by value, NOT by reference.
public class Main { public static void main(String[] args) { Foo f = new Foo("f"); changeReference(f); // It won't change the reference! modifyReference(f); // It will modify the object that the reference variable "f" refers to! } public static void changeReference(Foo a) { Foo b = new Foo("b"); a = b; } public static void modifyReference(Foo c) { c.setAttribute("c"); } }I will explain this in steps:
Declaring a reference named
fof typeFooand assign it a new object of typeFoowith an attribute"f".Foo f = new Foo("f");
From the method side, a reference of type
Foowith a nameais declared and it's initially assignednull.public static void changeReference(Foo a)
As you call the method
changeReference, the referenceawill be assigned the object which is passed as an argument.changeReference(f);
Declaring a reference named
bof typeFooand assign it a new object of typeFoowith an attribute"b".Foo b = new Foo("b");
a = bmakes a new assignment to the referencea, notf, of the object whose attribute is"b".
As you call
modifyReference(Foo c)method, a referencecis created and assigned the object with attribute"f".
c.setAttribute("c");will change the attribute of the object that referencecpoints to it, and it's the same object that referencefpoints to it.
I hope you understand now how passing objects as arguments works in Java 🎉
Last updated
Was this helpful?