Java передает все по значению - , включая ссылки .
. Это означает, что если вы передаете объект, вы можете изменить свойства этого объекта иони сохранятся после вашего возвращения, но вы не можете заменить объект целиком на совершенно новый объект, потому что вы не можете изменить ссылку - только то, что ссылкауказывает на.
Перед вашей aClass =
строкой:
Outside the function:
obj ---> <foo>
Inside the function:
aClass ---> <foo>
После вашей aClass =
строки:
Inside the function:
aClass ---> <bar>
Outside the function:
obj ---> <foo>
Ключевым моментом, на который следует обратить внимание, является то, что aClass
не указывает на obj
- оно указывает на <foo>
.Вы не передаете адрес obj
, вы передаете адрес того, что obj
указывает на .Таким образом, когда вы изменяете то, на что указывает aClass
, это не касается obj
.
В качестве альтернативного способа мышления:
В Java
Bar foo = new Bar();
эквивалентно C ++,
Bar *foo = new Bar();
Таким образом, когда вы передаете foo
функции, вы не передаете адрес foo
- вы передаете адресвыделенного объекта.В Java нет передачи по ссылке в стиле &
, как в C / C ++.