我有三个列表,在第三个列表中,我要合并两个列表。如果我进行第三次更改,为什么更改会反映到其他列表中,以及如何克服?

List<Communication> communicationFromList = fromTicket.getCommunications();
List<Communication> communicationToList = toTicket.getCommunications();
List<Communication>  mergedCommunication=new  ArrayList<>();

mergedCommunication.addAll(communicationToList);
mergedCommunication.addAll(communicationFromList);

for (int i = index; i < mergedCommunication.size(); i++) {
        if (!ObjectUtils.isEmpty(mergedCommunication.get(i))) {
          int j =i;
         Communication communication = mergedCommunication.get(i);
         communication.setCommSeqId(++j);
         communication.setMergeInfo("Merged From: " + fromTicketId);
        }
      }


由于上述变化也反映到其他列表。如何克服

最佳答案

因此,在java对象中通过引用传递。在这种情况下,当您在addAll上执行mergedCommunication时,它会同时添加两个列表中所有对象的引用,即communicationToListcommunicationFromListmergedCommunication。因此,Communication中的mergedCommunication对象与其他两个列表中的对象相同。

**建议:**如果您不想修改原始对象,可以进行克隆。

09-28 07:22