2014-09-15 3 views
-1

Я знаю, что было несколько сообщений, объясняющих аргумент, передаваемый в Java. Я также знаю, что аргументы передаются по значению, но значение является ссылкой на объект. Скажем, у меня есть следующие 2-х мер.Передача аргумента Java

public void append(List<String> list){ 
    list.add("some string"); 
} 

public void incr(int count){ 
    count++; 
} 

Если я позвоню первый метод, объект list модифицируется и модифицированное значение существует после вызова метода тоже. Но когда я вызываю incr(count), измененное значение count теряется после возврата вызова метода.

Почему в некоторых случаях значение изменяется, а в другом - нет?

+0

'list' - это ссылка, ссылающаяся на объект List, который существует вне списка параметров. 'count' - это значение, а не ссылка, и его значение существует только в списке параметров. –

+0

count ++ эквивалентен count = count + 1. Он ** присваивает ** новое значение переменной 'count'. Первый фрагмент не присваивает новый список переменной 'list'. Он только изменяет содержимое объекта списка. –

+0

Например, вы не можете сделать 'list = someOtherList;' и изменить, какой объект списка ссылается вызывающий. –

ответ

-1

Я также знаю, что аргументы передаются по значению, но значение является ссылкой на объект.

Это не то, что java делает. Java передается по значению. Если что-то является ссылочным типом, то эта ссылка передается по значению. Но это не то же самое, что пройти мимо ССЫЛКИ. Итак, во втором примере переменная count передается по значению, поэтому ваши изменения теряются.

+0

«Но это не то же самое, что передавать по значению». Это * точно *, что означает «передать по значению». Вы также говорите: «Java проходит по значению», поэтому на самом деле неясно, что вы здесь говорите. –

+0

Вы совершенно правы. печатал слишком быстро и смущал себя. срок исправления. –

Смежные вопросы