Qual è la differenza tra String str = new String("SOME")
e String str="SOME"
Queste dichiarazioni offrono una variazione delle prestazioni.Dichiarazione stringa Java
risposta
String str = new String("SOME")
creare sempre un nuovo oggetto sul mucchio
String str="SOME"
utilizza il String pool
Prova questo piccolo esempio:
String s1 = new String("hello");
String s2 = "hello";
String s3 = "hello";
System.err.println(s1 == s2);
System.err.println(s2 == s3);
Per evitare la creazione di oggetti inutili negli all'uso mucchio la seconda forma.
C'è una piccola differenza tra entrambi.
seconda dichiarazione assignates il riferimento associato alla costante SOME
alla variabile str
prima dichiarazione crea una nuova stringa avente per valore il valore della costante SOME
e assignates suo riferimento alla variabile str
.
Nel primo caso, è stata creata una seconda stringa con lo stesso valore di SOME
che implica più tempo di inizializzazione. Di conseguenza, dovresti evitarlo. Inoltre, al momento della compilazione, tutte le costanti SOME
vengono trasformate nella stessa istanza, che utilizza molta meno memoria.
Di conseguenza, preferisco sempre la seconda sintassi.
Per il record, ci sono scenari in cui 'new String (String)' ha senso, come se si avesse una stringa molto grande e si è interessati solo a mantenere una piccola sottostringa . I metodi 'substring' restituiscono solo una vista in peso della stringa originale, quindi usando' new String (hugeString.substring (a, b)) 'forza una copia e consente al GC di recuperare il contenuto di 'hugeString' quando esce da scopo. Non avrebbero dovuto trasformarlo in un costruttore, anche se ... – gustafc
Interessante caso di ottimizzazione, in effetti, ma non vorrei seguire questo percorso prima di aver fatto alcuni controlli del profiler (anche tu, suppongo). – Riduidel
Prima verrà creato un nuovo oggetto String in heap e str lo farà riferimento. Inoltre, anche il letterale verrà inserito nel pool di stringhe. Significa che verranno creati 2 oggetti e 1 variabile di riferimento.
La seconda opzione crea letteralmente String in pool e lo farà riferimento a str. Quindi verranno creati solo 1 oggetto e 1 riferimento. Questa opzione utilizzerà sempre l'istanza di String pool anziché crearne una nuova ogni volta che viene eseguita.
- 1. Dichiarazione stringa C++
- 2. Dichiarazione variabile stringa C++
- 3. "Quando" dichiarazione vs Java "switch" dichiarazione
- 4. Dichiarazione con Java
- 5. Spiegazione una dichiarazione Java
- 6. Java - Array di dichiarazione
- 7. Java dichiarazione campo generico
- 8. Java: preparazione di una dichiarazione senza connessione
- 9. Java - Dichiarazione dell'oggetto e inizializzazione
- 10. abbreviazione di Java Se dichiarazione
- 11. .NET - discarica dichiarazione lambda corpo a stringa
- 12. Dichiarazione di array dinamici in java
- 13. Dichiarazione di una lista connessa in Java
- 14. Dichiarazione di un iteratore in Java
- 15. Java: Spring Framework: dichiarazione di mappe nidificate
- 16. Utilizzo della dichiarazione predefinita @interface in Java
- 17. Switch Java: dichiarazione delle variabili e scope
- 18. Strano sintassi di dichiarazione ArrayList in java
- 19. Dichiarazione di oggetto Java dato il suo tipo/nome di classe come stringa
- 20. regex per abbinare la dichiarazione di variabile in java
- 21. Stringa Java divisa da "|"
- 22. java Stringa di classe
- 23. Java: PrintStream in stringa?
- 24. apice in stringa Java
- 25. Java stringa [] copia parziale
- 26. Java prestazioni spaccatura stringa
- 27. Java split stringa all'array
- 28. Come convertire stringa esadecimale in stringa java
- 29. Creazione stringa Java e pool Costante stringa
- 30. SE Dichiarazione condizioni multiple, stessa dichiarazione
Vedere anche http://stackoverflow.com/questions/334518/java-strings-string-s-new-stringsilly e http://stackoverflow.com/questions/390703/what-is-the-purpose-of -the-expression-new-string-in-java – polygenelubricants