天天看點

使用 ArrayList.add() 方法,添加的資料為什麼會被覆寫?

示例

public class test1 {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		List<List<Integer>> res = new ArrayList<>();
		list.add(1);
		res.add(list);
		System.out.println(res);
		
		list.add(2);
		res.add(list);
		System.out.println(res);
	}
}


結果
[[1]]
[[1, 2], [1, 2]]
           

為什麼第二行輸出的結果不是 [[1], [1, 2]] 呢?這是因為 Java 種除了8種基本資料類型的變量外,其他變量都是引用類型變量。即對象的引用存放在棧記憶體中,而 new 出來的對象存放在堆記憶體中。

使用 ArrayList.add() 方法,添加的資料為什麼會被覆寫?

如上圖所示,res 變量所指向的 List 集合中存放的是 2 個list引用,而這兩個list引用都是棧記憶體中的同一個list引用,是以res.get(0) 與 res.get(1) 的值相同。