我有三个列表,在第三个列表中,我要合并两个列表。如果我进行第三次更改,为什么更改会反映到其他列表中,以及如何克服?
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
时,它会同时添加两个列表中所有对象的引用,即communicationToList
和communicationFromList
到mergedCommunication
。因此,Communication
中的mergedCommunication
对象与其他两个列表中的对象相同。
**建议:**如果您不想修改原始对象,可以进行克隆。