Эта статья запутана.
Предполагается, что создание копии ссылки и передача ее методу является передачей по значению, поскольку копия передается. Это не то, что я и многие понимаем.
Передается ли язык по значению или по ссылке? Почему мы задаем этот вопрос?
Вся проблема возникает при вызове метода. Такой метод определяется параметрами и вызывается с аргументами.
Полезно проводить различие между параметром и аргументом. Параметр - это имя полученной вещи, указанное при определении метода. Аргумент - это имя отправленной вещи, указанное при вызове метода.
Любой контент, хранящийся в памяти, имеет адрес для доступа. Этот адрес содержимого называется ссылкой. С помощью ссылки можно получить доступ к контенту. Если ссылка дается на уровень, то этот уровень может получать доступ и обновлять ссылочный контент. Если ссылка дается на метод, то этот метод может также получить доступ и обновить этот ссылочный контент.
Что происходит при "передаче" аргумента в параметр метода? Создается копия аргумента и передается параметру метода.
Что мы понимаем, когда говорим «передача по значению» и «передача по ссылке»? При использовании слова «ценность» мы понимаем фактическое содержание, которое хранится, скажем, чье-то имя. При использовании слова «ссылка» мы понимаем адрес памяти, указывающий на «значение».
Итак, когда мы говорим «передать по значению», мы понимаем, что аргумент, который мы передаем в параметр метода, является некоторым содержимым. И когда мы говорим «передать по ссылке», мы понимаем, что аргумент, который мы передаем в параметр метода, является адресом памяти, указывающим на некоторый контент.
Если передается какой-либо контент, то копия этого контента создается и передается методу. Поскольку предоставленное содержимое является копией, нет риска изменить исходное содержимое.
Если, с другой стороны, то, что передается, является ссылкой на некоторый контент, тогда создается копия этой ссылки и передается методу, причем сам ссылочный контент не является копией исходного контента, но исходное содержание, скопирована только его ссылка.
В Java я понимаю, что примитивный тип передается как контент, то есть передается по значению, а объект передается как ссылка на некоторый контент, то есть передается по ссылке.
То, что копия ссылки сделана до того, как передана параметру метода, не делает эту ссылку значением.
Своп-тест не является решающим показателем.
Если объект вне метода может быть изменен изнутри метода при передаче его методу, то передача осуществляется по ссылке.
Документация по Java и множество статей в лучшем случае сбивают с толку, а в худшем - ошибочны.
Мои два цента.