Если я возвращаю List в Java, является ли возвращаемое значение ссылкой или фактическим значением? - PullRequest
4 голосов
/ 20 февраля 2011

Довольно понятно: мне нужно изменить полученный ArrayList, но я хочу, чтобы оригинал не изменился.

Я знаю, что это очень просто, и я не уверен, почему я не знаю окончательного ответа.Думаю, лучше поздно, чем никогда.

Ответы [ 4 ]

4 голосов
/ 20 февраля 2011

У вас будет ссылка на оригинал ArrayList.

. Вы можете создать мелкую копию списка с помощью clone().

Посмотрите на этот вопрос , если вам нужна глубокая копия.

2 голосов
/ 20 февраля 2011

Если вы хотите изменить список, но не изменять оригинал, вам не следует оперировать списком, который вы получили в аргументах метода, потому что оперируете ссылками. Лучше использовать что-то вроде этого:

public void modifyList(List myList) {
    myList.add("aaa"); // original *will* be modified
    List modifiable = new ArrayList(myList);
    modifiable.add("bbb"); // original will *not* be modified - only the copy
}
2 голосов
/ 20 февраля 2011

Все в java будет ссылкой по умолчанию.Так что да, изменение возвращенного массива изменит исходный.

Чтобы избежать этой проблемы, вам нужно создать копию исходного.Для этого используйте метод .clone ().

0 голосов
/ 20 февраля 2011

Это будет тот же ArrayList. Если вам нужна копия, вам придется скопировать ее самостоятельно. Не обязательно легко, если ArrayList содержит сложные объекты!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...