La différence entre res.add (list) et res.add (new ArrayList <Integer> (list)) en Java

Parlons d'abord de la conclusion

res.add(list)C'est une copie superficielle, c'est
res.add(new ArrayList(list))une copie profonde.

Regardez le code

import java.util.ArrayList;
public class Test {
    
    
	public static void main(String[] args) {
    
    
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(2);
		list.add(3);
		
		ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
		ArrayList<ArrayList<Integer>> res_2 = new ArrayList<ArrayList<Integer>>();
		
		res.add(list);
		res_2.add(new ArrayList<Integer>(list));
		System.out.println("res为:");
		System.out.println(res);
		System.out.println("res_2为:");
		System.out.println(res_2);
		
		list.add(4);
		res.add(list);
		res_2.add(new ArrayList<Integer>(list));
		System.out.println("res为:");
		System.out.println(res);
		System.out.println("res_2为:");
		System.out.println(res_2);	
	}
}

Insérez la description de l'image ici

Pour résumer

res.add(list)Après avoir ajouté une liste, si la liste change, la valeur de res changera en conséquence.
res.add(new ArrayList(list))Après avoir ajouté une liste, si la liste change, la valeur de res 不会changera en conséquence.

Blog de référence

https://blog.csdn.net/weixin_42707971/article/details/107609388

Je suppose que tu aimes

Origine blog.csdn.net/Awt_FuDongLai/article/details/110469066
conseillé
Classement