Спасибо всем, ребята. Я понял это снова, прочитав ваши посты. Вероятно, это сбивает с толку понятие, так как у меня это переварилось давно, но недавно я забыл, как это работает снова. Поэтому я хочу поделиться ключом, который решает проблему для меня. (обратите внимание, что не примитивные объекты (примитивы int, boolean и т. д.) в Java являются технически указателями). Когда вы добавляете объект o в список, список и o указывают на одно и то же, поэтому при изменении o элемент списка изменяется. Это до тех пор, пока они указывают на одно и то же и ломаются, когда o указывает на что-то еще на = .
o = null; //o points to nothing and changes in o from now on doesn't effect the list's item
или
Object a = new Object();
o = a; //o and the list's item don't point to same thing so changes in o doesn't effect the list's item (but it effects a)
надеюсь, это кому-нибудь поможет