Java 複製ArrayList
物件到新的ArrayList
物件。
List<Integer> aList = Arrays.asList(1,2,3);
List<Integer> bList = new ArrayList<>(aList); // copy all elements in aList to bList.
System.out.println(aList == bList); // false, aList and bList are different object.
System.out.println(aList.equals(bList)); // true, the elements in aList and bList are equal.
但這邊有個常犯的陷阱(曾花了我一小時找錯誤),如果List
中的元素為可變的物件(mutable object),例如常用的POJO,則用以上方法複製出的新List
裡面的元素仍指向原本的參照,會導致當修改新複製的List
中的元素內容時,原List
中的值也被修改了。因此在複製List
中的元素為可變物件時,裡面的元素也必須複製(clone)。
而Java的原始型別(primitive type)的包裹類(wrapper class)都是不可變的類別(immutable class),因此沒有上述問題。
參考:
沒有留言:
張貼留言