Я знаю, что было несколько сообщений, объясняющих аргумент, передаваемый в Java. Я также знаю, что аргументы передаются по значению, но значение является ссылкой на объект. Скажем, у меня есть следующие 2-х мер.Передача аргумента Java
public void append(List<String> list){
list.add("some string");
}
public void incr(int count){
count++;
}
Если я позвоню первый метод, объект list
модифицируется и модифицированное значение существует после вызова метода тоже. Но когда я вызываю incr(count)
, измененное значение count
теряется после возврата вызова метода.
Почему в некоторых случаях значение изменяется, а в другом - нет?
'list' - это ссылка, ссылающаяся на объект List, который существует вне списка параметров. 'count' - это значение, а не ссылка, и его значение существует только в списке параметров. –
count ++ эквивалентен count = count + 1. Он ** присваивает ** новое значение переменной 'count'. Первый фрагмент не присваивает новый список переменной 'list'. Он только изменяет содержимое объекта списка. –
Например, вы не можете сделать 'list = someOtherList;' и изменить, какой объект списка ссылается вызывающий. –