2013-12-05 6 views
1

У меня есть ArrayList объектов. я «извлечь» один из тех объектов, с чем-то вроде:Ссылка на объект?

MyObjectClass myObject = myArrayList.get(34); 

Если я впоследствии вносить изменения в MyObject, такие как:

myObject.someMember = 97; 

это только делает его локальную копию объекта или фактический объект в списке массивов? То есть, является ли переменная myObject копией или является ли она ссылкой для объекта в списке массивов?

+0

Я добавил тэг [tag: Java] и ответил на Java, но теперь я вижу, что C# также имеет класс ArrayList. При необходимости измените теги и всегда указывайте тег языка в каждом вопросе. – Potatoswatter

ответ

2

В Java имя, ссылающееся на объект, всегда имеет ссылочную семантику. Контейнеры get функции идиоматически возвращают ту же ссылку, что и контейнер.

Если функция хочет вернуть локальную копию или вам нужна локальная копия, это делается с использованием new.

MyObjectClass myObject = new MyObjectClass(myArrayList.get(34)); 
+1

Но это предполагает, что существует конструктор копирования ... – Sinkingpoint

+0

@Quirliom Без этого вы просто не можете иметь копию. – Potatoswatter

1

это просто делает его локальную копию объекта или фактического объекта в списке массива? То есть, является ли переменная myObject копией или является ли это ссылкой на объект в списке массивов?

Да будет внести изменения в состоянии объекта, который находится в ArrayList

0

Ни. И myObject, и элемент в arraylist, являются ссылками на объект, который хранится в другом месте.

ArrayList не содержит объект, а только ссылку на объект (точно так же как ваша ссылка на объект). Объекты никогда не хранятся внутри других объектов на Java, хотя иногда их удобно воспринимать таким образом.

+0

Спасибо, один и все за ответы. Они ясно ответили на мой вопрос для меня. –