2012-11-03 45 views

Trả lời

3

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.

1

đơ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ụ.

2

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:

  1. bạn có thể khởi tạo các trường trong hàm dựng của mình
  2. sao chép có thể khởi tạo trường, tức là mảng
Các vấn đề liên quan