В Java все аргументы метода передаются по значению, то есть копируется значение переменной (даже если она ссылочного типа). Однако у ссылочных переменных копируется лишь значение ссылки, а не объекта, на который она ссылается. Поэтому, если произойдет изменение состояния объекта, на который ссылается переданная ссылка, то эти изменения будут отражены на объекте, на который ссылается исходная переменная. Таким образом, то, что большинство людей называют "передачей по ссылке", на самом деле называется "передачей значения ссылки".
Пример:
public class Test {
public static void main(String[] args) {
StringBuffer str = new StringBuffer("hello");
change(str);
System.out.println(str);
}
public static void change(StringBuffer newStr) {
newStr.append(" world");
}
}
В этом примере метод change() принимает ссылку на объект StringBuffer и модифицирует его, добавляя к нему строку " world". В методе main() переменная str также ссылается на этот же самый объект StringBuffer, поэтому после вызова метода change() будет выведена строка "hello world".
1606 вопрос-ответ по Java: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov