您将
ArrayList两次向同一内部引用添加到外部列表。因此,当您更改内部列表时(通过添加300),您会在“两个”内部列表中看到它(实际上,只有一个内部列表,外部列表中存储了两个引用)。
为了获得理想的结果,您应该创建一个新的内部列表:
public static void main(String[] args) { ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> inner = new ArrayList<Integer>(); inner.add(100); inner.add(200); outer.add(inner); // add first list inner = new ArrayList<Integer>(inner); // create a new inner list that has the same content as // the original inner list outer.add(inner); // add second list outer.get(0).add(300); // changes only the first inner list System.out.println(outer);}


