Bài viết được sự cho phép của tác giả Kiên Nguyễn
Java Clone là một trong 5 cách khởi tạo mới một Object. Tại sao chúng ta lại cần nó?. Hãy cùng tìm hiểu qua bài viết dưới đây:
1. Từ câu chuyện của reference variable.
Không cần quá phức tạp, ngay từ ban đầu, ta sẽ tự đặt câu hỏi rằng:
“Nếu muốn sao chép một Object A, chẳng phải cứ gán A = B là được sao?, cần gì tới Java Clone”
Xem thêm các việc làm Java lương cao trên TopDev
Rất tiếc, câu trả lời là không. Đối với C++, phép gán này sẽ cho ra một Object mới, hoàn toàn độc lập với Object cũ. Nhưng Java thì không làm được, nếu sử dụng phép toán ==, java sẽ tạo ra một biến tham chiếu (reference variable) -> không tạo ra một object mới.


Để dễ hiểu hơn, ta cùng xem xét ví dụ dưới đây:
Output:
10 20 100 20 100 20
2. Java clone ra đời.
3. Sử dụng như thế nào?.
Để có thể sử dụng method clone, có hai thứ cần làm:
- Class chúng ta muốn Clone nhất thiết phải implement Cloneable interface. Nếu không, JVM sẽ throw exception CloneNotSupportedException khi ta gọi method clone() trong Object.
- Trường hợp muốn gọi clone() ở class cha, sử dụng super.clone().
4. Shallow copy và deep copy.
4.1 Shallow copy
Chính vì cả 2 Object X và Y đều trỏ về cùng 1 địa chỉ -> trường hợp có thay đổi giá trị ở Object cha, giá trị sẽ thay đổi luôn ở Object con. Tuy cũng sử dụng Java Clone, nhưng Shallow có chi phí khởi tạo (memory) thấp hơn.
4.2 Deep copy
Phương thức chính được sử dụng trong Java Clone là clone(). Phương thức này sử dụng Deep copy, ta sẽ sử dụng method clone(). Khi sử dụng clone(), một Object được tạo ra. Nhưng khi có sự thay đổi về giá trị ở Object cha -> sự thay đổi sẽ không reflect (phản án) tới Object con.
5. Tham khảo.
- Java Stream – Collectors và Statistics – KieBlog
- Geeksforgeeks – Clone in Java.
- Java Cloning – Copy Constructors vs. Cloning.
- Object Cloning in java.
Bài viết gốc được đăng tải tại kieblog.vn
Có thể bạn quan tâm:
- Những projects giúp nâng hạng Front-end Developer
- Marker Interface trong Java
- CDN là gì? – CDN hoạt động như thế nào?
Xem thêm Việc làm IT hấp dẫn trên TopDev