2012-11-03 19 views

risposta

3

new l'operatore istanzia il nuovo oggetto mentre clone() è più simile a copy constructor. Il metodo clone() crea una copia dell'oggetto con i valori degli attributi membro copiati anche.

1

Semplice dichiarato,

nuova crea un'istanza

mentre

clone restituisce un clone di un'istanza.

2

new crea un oggetto in base al costruttore, mentre clone() crea un nuovo oggetto e inizializza i campi con il contenuto dell'oggetto originale.

io lo prendo, si legge il javadoc, quindi lascia che ti porterà attraverso un esempio:

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) {} 
    } 
} 

JavaDoc dice:

questo metodo esegue una "copia superficiale" di questo oggetto , non una "copia profonda ".

che spiega il comportamento di lista i nostri bambini: I riferimenti sono copiati, non gli elementi a cui fanno riferimento, in tal modo la nostra copia è 'superficiale'

L'allocazione di memoria possono differire naturalmente:

  1. è possibile inizializzare i campi nel costruttore
  2. clone in grado di inizializzare un campo, vale a dire una serie
Problemi correlati