2009-10-07 50 views
5

Tôi đang cố gắng sao chép nội dung của một danh sách mảng vào một đối tượng khác. Tôi cố gắng khởi tạo đối tượng ArrayList mới theo các cách sauJava - sao chép các đối tượng mảng danh sách

newArrList.addAll(oldArrList); 

newArrList = new ArrayList(oldArrList); 

Nhưng mỗi khi tôi thực hiện thay đổi một trong những danh sách mảng, giá trị cũng thay đổi trong ArrayList khác.

Ai đó có thể vui lòng cho tôi biết cách tôi có thể tránh điều này.

Cảm ơn.

Trả lời

15

ArrayList sẽ chỉ chứa tham chiếu đến đối tượng - không phải chính đối tượng. Khi bạn sao chép nội dung của một danh sách sang danh sách khác, bạn sẽ sao chép các tham chiếu đó. Điều đó có nghĩa là hai danh sách sẽ đề cập đến cùng một đối tượng.

Tôi nghi ngờ rằng khi bạn nói bạn thực hiện thay đổi đối với một trong các danh sách, bạn thực sự có nghĩa là bạn đang thay đổi một trong các đối tượng được tham chiếu theo danh sách. Đó là để được mong đợi.

Nếu bạn muốn danh sách có tham chiếu đến đối tượng độc lập, bạn cần tạo một bản sao sâu sâu của các đối tượng khi bạn sao chép chúng từ danh sách này sang danh sách khác. Chính xác cách thức hoạt động sẽ phụ thuộc vào các đối tượng bạn đang sao chép.

+0

Xin chào, bằng 'bản sao sâu ', bạn có nghĩa là các đối tượng/nội dung phải được sao chép từng cái một không? –

+0

@ user1282407: Có. Thay vì giữ các tham chiếu đến các đối tượng hiện có, bạn tạo các đối tượng mới có cùng nội dung (ngoại trừ các đối tượng không thay đổi, ở đó nó không quan trọng). –

+0

OK. Cảm ơn! Tôi đoán không có cách nào dễ dàng hơn để sao chép nội dung. . –

Các vấn đề liên quan