Java luôn là pass-by-value. Thật không may, khi chúng ta truyền giá trị của một đối tượng, chúng ta đang truyền tham chiếu đến nó. Không có cái gọi là "pass-by-reference" trong Java. Điều này gây nhầm lẫn cho người mới bắt đầu.
Chìa khóa để hiểu điều này là một cái gì đó như:
Dog myDog;
không phải là một Dog; nó thực sự là một con trỏ đến một Dog.
Vì vậy, khi bạn có
Dog myDog = new Dog("Rover");
foo(myDog);
về cơ bản bạn đang truyền địa chỉ của đối tượng Dog đã tạo cho phương thức foo.