Cuál es la diferencia entre String str = new String("SOME")
y String str="SOME"
¿Estas declaraciones dan variación de rendimiento.Java String declaration
Respuesta
String str = new String("SOME")
siempre crear un nuevo objeto en el montón
String str="SOME"
utiliza la String pool
probar este pequeño ejemplo:
String s1 = new String("hello");
String s2 = "hello";
String s3 = "hello";
System.err.println(s1 == s2);
System.err.println(s2 == s3);
Para evitar la creación de objetos innecesarios en el uso montón la segunda forma.
Hay una pequeña diferencia entre ambos.
segunda declaración assignates la referencia asociada a la constante SOME
a la variable str
Primera declaración crea una nueva cadena de valor que tenga el valor de la constante de SOME
y assignates su referencia a la variable str
.
En el primer caso, se ha creado una segunda cadena que tiene el mismo valor que SOME
, lo que implica un mayor tiempo de inicialización. Como consecuencia, debes evitarlo. Además, en tiempo de compilación, todas las constantes SOME
se transforman en la misma instancia, que utiliza mucha menos memoria.
Como consecuencia, siempre preferimos la segunda sintaxis.
Para el registro, hay escenarios donde 'new String (String)' tiene sentido, como si tiene una cadena muy grande y solo le interesa retener una subcadena pequeña . Los métodos 'substring' solo devuelven una vista flyweight de la cadena original, por lo que usar' new String (hugeString.substring (a, b)) 'fuerza una copia y permite que GC recupere el contenido de' hugeString' cuando se apaga alcance. Sin embargo, no deberían haberlo convertido en un constructor ... – gustafc
Es un caso interesante de optimización, de hecho, pero no iría por este camino antes de haber hecho algunas comprobaciones de perfil (por lo que tú, supongo). – Riduidel
Primero creará un nuevo objeto String en heap y str lo referirá. Además, literal también se colocará en String pool. Significa que se crearán 2 objetos y 1 variable de referencia.
La segunda opción creará String literal solo en pool y str lo referirá. Por lo tanto, solo se creará 1 objeto y 1 referencia. Esta opción usará siempre la instancia del conjunto de cadenas en lugar de crear una nueva cada vez que se ejecute.
- 1. C++ String Variable Declaration
- 2. Java Enums: Implementing methods After Declaration?
- 3. OCaml forward declaration
- 4. ios boolean var declaration
- 5. Inline struct declaration
- 6. C++: ¿auto_ptr + forward declaration?
- 7. C struct struct declaration
- 8. Java: ¿Es confiable assertEquals (String, String)?
- 9. String POOL en java
- 10. Java String Valor Unicode
- 11. Java String Memory Leak
- 12. Java: PrintStream a String?
- 13. JAVA: NamedQuery String problema
- 14. Groovy/String de Java
- 15. MATLAB: Java String [] conversión
- 16. superíndice en Java String
- 17. Java: ¿cómo inicializar String []?
- 18. String ... parámetro en Java
- 19. String datatype in java
- 20. Objective-C: @property declaration without implementation (@synthesize)
- 21. forward declaration of boost :: thread variable
- 22. Struct Declaration: ¿Inicializador válido en la declaración?
- 23. Query String Manipulation en Java
- 24. Decode base64 String Java 5
- 25. ¿Qué es "String ..." en java?
- 26. Java BASE64 utf8 string decoding
- 27. String to Char array Java
- 28. Map to String en Java
- 29. Convertir Java String en sql.Timestamp
- 30. Java isEmpty() undefined para String?
Véase también http://stackoverflow.com/questions/334518/java-strings-string-s-new-stringsilly y http://stackoverflow.com/questions/390703/what-is-the-purpose-of -the-expression-new-string-in-java – polygenelubricants