Java Arraylist clearing:clear()的工作原理

riv*_*ivu 2 java arraylist

我有一个对象mypath的2D列表List<List<Object>> mypath = new ArrayList<List<Object>>();.假设我有以下代码行

  mypath.add(temppath);
  System.out.println("mypath: "+mypath.get(mypath.size()-1));
  temppath.clear();
  System.out.println("mypath: "+mypath.get(mypath.size()-1));
Run Code Online (Sandbox Code Playgroud)

我从第一个print语句中看到一个对象列表,但是从第二个print中看到一个空列表.当我清除temppath时,mypath的元素也会被清除.有办法解决这个问题吗?我可以清除temppath,而不清除mypath的最后一个元素吗?

Ash*_*ynd 5

将temppath添加到mypath时,不创建新对象,而是添加对现有对象的引用.因此,您对此对象所做的一切都将反映在引用它的任何位置.

解决此问题的一种可能方法是创建temppath的副本并将其添加到mypath.