2016-04-17 6 views
-1

Когда мы вызываем метод ArrayList.add(), он создает новый объект и добавляет его в список или добавляет ли этот объект к списку?Что происходит, когда мы вызываем метод ArrayList.add()?

Например: предположим, что мы имеем два ArrayList следующим образом:

ArrayList<ClassA> a1 и ArrayList<ClassA> a2. Если я запустил код:

a2.add(a1.get(i)) будет ли он создавать новый объект, а затем добавить его в a2 или он будет ссылаться на один и тот же объект из двух разных списков?

Это не копия

ли Java передача по значению или передать ссылочной вопрос?

, потому что я хочу знать внутреннюю работу метода ArrayList.add(), который создает объектную копию переданного параметра или нет?

+0

Возможный дубликат [Является Java «перейти по ссылке» или «передача по значению»?] (Http://stackoverflow.com/ Вопросы/40480/is-java-pass-by-reference-or-pass-by-value) – Savior

+0

@Pillar это о том, как работает метод ArrayList.add(). – cnova

+0

Нет причин быть конкретными в отношении 'add'. Все методы работают одинаково в этом отношении. – Savior

ответ

3

Он будет ссылаться на тот же объект в двух разных списках.

Конечно, вы всегда можете проверить это с помощью некоторых усилий по отладке.

+3

Или используя '==';) –

2

Вы можете передавать ссылки или примитивы только методу. Этот метод не является исключением.

ArrayList<String> list = new ArrayList<>(); 
String s = "Hello"; 
list.add(s); // pass the reference. 

a2.add (a1.get (я)) это будет создавать новый объект, а затем добавить его в а2 или он будет ссылаться на тот же объект с двух разных списков?

Это будет означать, как списки есть копия той же ссылка (которая будет указывать на тот же объект)

2

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

Если вы не хотите этого, рассмотреть возможность сделать то, что классовые immutable

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