Sự khác nhau giữa việc tạo đối tượng bằng cách sử dụng từ khóa new
và tạo đối tượng bằng cách sử dụng clone()
là gì? Có sự khác biệt nào giữa cấp phát bộ nhớ không?Sự khác biệt giữa việc tạo một đối tượng bằng cách sử dụng từ khóa mới và sử dụng phương pháp sao chép
Trả lời
new
nhà điều hành khởi tạo đối tượng mới trong khi clone()
giống như một nhà xây dựng bản sao sao chép. Phương thức clone()
tạo ra một bản sao của đối tượng có giá trị thuộc tính thành viên cũng được sao chép.
đơn giản nói,
mới tạo ra một thể hiện
khi
bản sao trả về một bản sao của một ví dụ.
Clone() tạo ra một thể hiện mới của lớp cùng và bản sao tất cả các trường để các trường hợp mới và trả về nó (sao chép cạn).
trong khi từ khóa mới là toán tử Java tạo đối tượng (http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html).
new
tạo đối tượng theo hàm tạo, trong khi clone()
tạo đối tượng mới và khởi tạo trường bằng nội dung của đối tượng gốc.
Tôi mang nó, bạn đọc javadoc, vì vậy hãy để tôi đưa bạn qua một ví dụ:
public class MyBaby implements Cloneable {
int age = 0;
String name = "Dolly";
List<String> list = new ArrayList<String>();
public static void main(String[] args) {
MyBaby originalBaby = new MyBaby();
originalBaby.setAge(1);
try {
// We clone the baby.
MyBaby clonedBaby = (MyBaby) originalBaby.clone();
// both babies now have: age 1, name "Molly" and an empty arraylist
originalBaby.setAge(2);
// originalBaby has age 2, the clone has age 1
originalBaby.setName("Molly");
// same goes for the String, both are individual fields
originalBaby.getList().add("addedString");
// both babies get the string added to the list,
// because both point to the same list.
System.out.println(clonedBaby.toString());
}
catch (CloneNotSupportedException e) {}
}
}
Các javadoc nói:
phương pháp này thực hiện một "bản sao cạn" của đối tượng này , không phải là hoạt động "sâu sao chép".
điều này giải thích hành vi của danh sách trẻ em của chúng tôi: Tài liệu tham khảo được sao chép, không phải là yếu tố được tham chiếu, do đó bản sao của chúng tôi là 'nông cạn'
Việc phân bổ bộ nhớ có thể khác nhau của khóa học:
- bạn có thể khởi tạo các trường trong hàm dựng của mình
- sao chép có thể khởi tạo trường, tức là mảng
- 1. Sự khác biệt trong loại giữa việc sử dụng và không sử dụng Đặt từ khóa
- 2. Sự khác biệt giữa các phương pháp sao chép và sao chép của Ruby là gì?
- 3. Sự khác biệt giữa việc sử dụng @OneToMany và @ManyToMany
- 4. Có thể sao chép phương thức tạo đối tượng bằng cách sử dụng hàm tạo
- 5. Sự khác biệt giữa việc sử dụng Trace và TraceSource
- 6. Rails: Sao chép các thuộc tính từ một đối tượng khác sử dụng "thuộc tính" phương pháp
- 7. Sự khác biệt giữa việc sử dụng Modulename; và sử dụng Modulename();
- 8. Sự khác biệt giữa việc tạo đối tượng mới và tiêm phụ thuộc
- 9. Sự khác biệt giữa việc khởi tạo một lớp và khởi tạo một đối tượng?
- 10. Sử dụng Bưu kiện để sao chép một đối tượng?
- 11. Sự khác biệt giữa đối tượng và *?
- 12. Tại sao nhận được sự khác biệt giữa việc sử dụng XCode và xcodebuild?
- 13. Sự khác biệt giữa một đối tượng và một băm?
- 14. Sự khác biệt giữa readAsBinaryString và readAsText sử dụng FileReader
- 15. tạo đối tượng từ đóng JS: tôi có nên sử dụng từ khóa "mới" không?
- 16. Sử dụng phương pháp động C# cho một đối tượng
- 17. Sự khác biệt giữa khóa (điều này) và khóa trên đối tượng tĩnh
- 18. Sự khác biệt giữa đối tượng và từ điển?
- 19. Hiểu sự khác biệt giữa việc sử dụng cố định {}, Marshal.AllocHGlobal() và GCHandle.Alloc()
- 20. Indexeddb: Sự khác biệt giữa việc sử dụng và không đầy đủ?
- 21. Phương pháp kiểm tra JUnit sử dụng các phương pháp khác trong cùng một đối tượng
- 22. Sự khác nhau giữa việc sử dụng từ khóa Mới và gọi CreateObject trong Excel VBA là gì?
- 23. Sự khác biệt giữa đối tượng và NSObject
- 24. Sự khác biệt giữa bộ khởi tạo đối tượng và hàm tạo là gì?
- 25. Cách tạo đối tượng bằng cách sử dụng phương pháp nhà máy tĩnh?
- 26. Sự khác biệt giữa việc sử dụng con trỏ ký tự và mảng ký tự
- 27. Sử dụng một đối tượng làm khóa Từ điển chung
- 28. Tạo đối tượng mới bằng cách sử dụng sự phản chiếu?
- 29. sự khác biệt giữa việc sử dụng wmode = "transparent", "opaque" hoặc "window" cho đối tượng được nhúng trên trang web
- 30. Cách sử dụng LINQ để tạo kiểu đối tượng mới