Qual è la differenza tra la creazione di un oggetto utilizzando la parola chiave new
e la creazione di un oggetto utilizzando clone()
? C'è qualche differenza tra l'allocazione della memoria?Differenza tra la creazione di un oggetto utilizzando una nuova parola chiave e il metodo clone
risposta
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.
Semplice dichiarato,
nuova crea un'istanza
mentre
clone restituisce un clone di un'istanza.
Clone() crea una nuova istanza della stessa classe e copia tutti i campi per la nuova istanza e lo restituisce (shallow copia).
mentre la parola chiave nuova è un operatore Java che crea l'oggetto (http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html).
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:
- è possibile inizializzare i campi nel costruttore
- clone in grado di inizializzare un campo, vale a dire una serie
- 1. chiamando il metodo di base utilizzando la nuova parola chiave
- 2. PHP clone parola chiave
- 3. Nuova parola chiave: perché il metodo derivato non viene chiamato?
- 4. Scala: oggetti companion e parola chiave "nuova"
- 5. Cosa fa la nuova parola chiave qui?
- 6. Creazione oggetto utilizzando parola chiave static in Java
- 7. Perché kotlin ha abbandonato la parola chiave "nuova"?
- 8. Parola chiave "nuova" in Scala
- 9. Qual è la differenza tra la parola chiave join e la parola chiave inner join in oracle sql?
- 10. Qual è la differenza tra una chiave e un KeySpec?
- 11. Fai la nuova parola chiave opzionale
- 12. La parola chiave "overload" fa la differenza?
- 13. Qual è la differenza tra underscore clone() e simple '='?
- 14. utilizzando la parola chiave astratta nell'interfaccia
- 15. Lucee - Nuova parola chiave Coldfusion non funziona
- 16. differenza tra var parola chiave var e senza
- 17. Perché non è necessaria una nuova parola chiave per String
- 18. creazione di oggetti da chiusura JS: devo usare la parola chiave "nuova"?
- 19. Qual è la differenza tra i parametri di chiusura e la parola chiave 'use'?
- 20. Differenza tra oggetto e *?
- 21. Ruolo della nuova parola chiave in Java
- 22. Usa nuova parola chiave in C#
- 23. Differenza tra nuovo e override?
- 24. .NET utilizzando blocco e ritorno; parola chiave
- 25. utilizzando la parola chiave volatile in java4 e java5
- 26. Oggetti, parametri e la parola chiave ref in C#
- 27. Qual è la differenza tra Mat :: clone e Mat :: copyTo?
- 28. Differenza tra la creazione di un nuovo oggetto e l'iniezione di dipendenza
- 29. Cosa c'è di sbagliato nella "nuova" parola chiave in C++?
- 30. Qual è la differenza tra la nuova Action() e una lambda?