Технически, как мы знаем, переменные, которые ссылаются на объекты, являются строго указателями на объект. При передаче объекта в качестве параметра методу указатель или ссылка копируются в переменную параметра. Java называет это «передачей по значению».
Итак, вы получите как минимум две переменные, которые ссылаются на один и тот же объект. Если вы установите переменную параметра в null, другие переменные сохранят свое значение благодаря подсчету ссылок.
Если у вас есть следующий метод:
public void function(Person person) {};
И объект:
Person marcus = new Person();
marcus.name = "Marcus";
Вызов метода следующим образом:
function(marcus);
Вы в основном получаете это в локальной области действия метода:
Person person = marcus;
Если вы установите person = null
, это не повлияет на значение marcus
. Это связано с подсчетом ссылок.
Однако, если вы сделаете это:
person.name = null;
Это также верно:
marcus.name == null;
У вас есть ссылка на исходный объект в переменной параметра. Влияние на параметр параметр влияет на исходный объект. Вы можете делать все, кроме установки на ноль и ожидать, что оригинал будет также установлен на ноль. Подсчет ссылок предотвращает это.