Подтвердить что ты не робот

Добавьте объект в ArrayList и измените его позже.

Если у меня есть ArrayList, и я добавил к нему объект, а позже я изменил этот объект, будет ли это изменение отражать в ArrayList? или когда я добавляю объект в ArrayList, Java создает копию и добавляет ее в ArrayList?

Что делать, если я изменяю ссылку на этот объект на null? Означает ли это, что объект в массиве ArrayList тоже имеет значение null?

4b9b3361

Ответ 1

будет ли это изменение отражать в ArrayList?

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


или когда я добавляю объект в ArrayList, Java создает копию и добавляет ее в ArrayList?

Нет, он не будет копировать объект. (Он скопирует ссылку на объект.)


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

Нет, поскольку содержимое исходной ссылки было скопировано при добавлении в список. (Имейте в виду, что это копия, а не объект.)

Демонстрация:

StringBuffer sb = new StringBuffer("foo");

List<StringBuffer> list = new ArrayList<StringBuffer>();
list.add(sb);

System.out.println(list);   // prints [foo]
sb.append("bar");

System.out.println(list);   // prints [foobar]

sb = null;

System.out.println(list);   // still prints [foobar]

Ответ 2

Любое изменение объекта будет отражено в списке.

Однако, когда вы имеете дело с объектами, которые являются неизменяемыми, новый объект будет создан в "операциях изменения". Чем на самом деле ваш старый объект все еще находится в списке, а у вас есть новый в другом месте.

Ответ 3

Спасибо всем, ребята. Я понял это снова, прочитав ваши посты. Вероятно, это сбивает с толку понятие, так как у меня это переварилось давно, но недавно я забыл, как это работает снова. Поэтому я хочу поделиться ключом, который решает проблему для меня. (обратите внимание, что не примитивные Объекты (примитивы int, логические и т.д.) в Java являются технически указателями). Когда вы добавляете объект o в список, список и o указывают на одно и то же, поэтому при изменении o элемент списка изменяется. Это до тех пор, пока они указывают на одно и то же и ломаются, когда o указывает на что-то еще с помощью =.

o = null;   //o points to nothing and changes in o from now on doesn't effect the list item

или же

Object a = new Object();
o = a;    //o and the list item don't point to same thing so changes in o doesn't effect the list item (but it effects a)

надеюсь, это поможет кому-то

Ответ 4

Требуется добавить еще одну демонстрацию, где ArrayList находится внутри Карты в качестве значения. ArrayList изменяется после добавления в Map и Map отражает изменения.

В карте есть один элемент с именем матери в качестве ключа, а дети - значением.

    String key = "adeleMom";
    Map<String, ArrayList<String>> myMap = new HashMap<String, ArrayList<String>>();
    ArrayList<String> firstList = new ArrayList<String>();
    firstList.add("adele");
    myMap.put(key, firstList);
    firstList = null;
    ArrayList secondList = myMap.get(key);
    System.out.println(secondList); // prints [adele]
    secondList.add("bonnie");
    System.out.println("Added bonnie");
    ArrayList thirdList = myMap.get(key);
    System.out.println(thirdList); // prints [adele, bonnie]