2012-04-12 36 views
5

Tôi không chắc liệu những điều sau đây có dẫn đến bản sao sâu hoặc nông không?Phương pháp sao chép trên mảng bản sao sâu hay nông?

public void viewImages(final String[] instancesFilename) { 

    String[] instances = (String[])instancesFilename.clone();  
} 

Có cách đơn giản và nhanh chóng để sao chép sâu mảng chuỗi không?

Trả lời

14

Chuỗi trong Java là imutable (Không thể thay đổi giá trị của chúng). Vì vậy, không có sự khác biệt có thể phát hiện được giữa bản sao sâu và nông khi sao chép chuỗi.

Và chỉ để tham khảo thêm: Bản sao sẽ cạn nhưng đó không phải là vấn đề vì các chuỗi là bắt buộc.

Thực tế thú vị: Các chuỗi không thể sao chép được bằng phương pháp sao chép, vì vậy nếu bạn cố gắng sao chép sâu các chuỗi bằng phương pháp sao chép, bạn sẽ nhận được một CloneNotSupportedException.

+0

Tác giả yêu cầu sao chép 'Chuỗi []', không phải 'Chuỗi'. Các phần tử của 'instancesFilename' có thể được thay đổi sau này từ bên ngoài, vì vậy OP muốn tạo một bản sao của mảng. –

+0

Cũng có thể phát hiện * (là các tham chiếu giống nhau) nhưng nếu bạn đang sử dụng các chuỗi đúng cách, nó không nên là * đáng kể *. –

+0

@PhilippReichart: Nhưng OP đã thực hiện một bản sao - "bản sao sâu" và "bản sao nông" trong ngữ cảnh đó chỉ có thể là liệu các chuỗi có được nhân bản hay không - và như câu trả lời này nói, nó hầu như không quan trọng. –

1

Đây là một thú vị article discussing using serialization to make deep copies.

Các đối tượng trong biểu đồ cuộc gọi cần phải hỗ trợ tuần tự hóa nhưng trong nhiều loại hình kinh doanh của 3 ứng dụng Cấp, sự cần thiết đó là có.

Bài viết cung cấp một cuộc thảo luận về bản sao sâu và bản sao nông với một số sơ đồ.

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