How-Do/¿Puedo establecer el valor de un objeto String en Java (sin crear un nuevo objeto String)?¿Puedo establecer el valor de una cadena en Java sin usar un constructor?
Respuesta
No hay métodos "set" en String
. Las cadenas son immutable en Java. Para cambiar el valor de una variable String
, debe asignar una cadena diferente a la variable. No puedes cambiar la cadena existente.
(sin crear un nuevo objeto String)
Asignación no crea un nuevo objeto - copia la referencia. Tenga en cuenta que incluso si se escribe así:
s = "hello";
que se no crear un nuevo objeto de cadena cada vez que se ejecuta. El objeto de cadena vendrá del grupo de cadenas.
Las cadenas son inmutables por lo que no puede cambiar el valor de una cadena ya creada.
Actualmente, no hay forma de hacerlo en Java, los objetos String son inmutables por defecto.
De hecho, esa es una de las razones por las que el uso del operador de concatenación "+"
como "str1" + "str2"
es terriblemente ineficiente, porque lo que hace es copiar cada cadena para producir una tercera.
Dependiendo de su necesidad se debe considerar el uso de StringBuilder
Depende un poco de su definición de objeto. Si te refieres a la referencia, no. Siempre se crea una referencia. Si te refieres a la memoria utilizada por los personajes, seguro.
cadenas se internados (si es posible) lo que significa que en una asignación:
String s1 = "Hello";
String s2 = "Hello";
Hay 2 referencias (punteros a una posición de memoria), pero Hello
está en la memoria sólo en 1 lugar. Esta es una de las razones por las que las cadenas no se pueden modificar.
Seguro que puede acceder a la matriz de caracteres interna a través de la reflexión. Pero generalmente es una mala idea hacerlo. Más sobre http://www.eclipsezone.com/eclipse/forums/t16714.html.
El objeto String es inmutable en Java por lo que cualquier cambio crea un nuevo objeto String. Utilice un StringBuilder si desea realizar cambios en una cadena como objeto sin crear objetos nuevos. Como extra, StringBuilder te permite preasignar memoria adicional si sabes algo sobre la longitud final de tu cadena.
Me encontré con esta pregunta porque tengo que establecer una cadena dentro de un "tipo adjunto" - un tipo anónimo. Pero todas las variables que quiero establecer dentro y usar afuera deben ser definitivas.
La solución simple es use StringBuilder - es una cadena mutable.
- 1. Establecer valor en Enum - Java
- 2. Establecer el valor inicial de una propiedad al usar DataContractSerializer
- 3. ¿Puedo establecer el valor de inicio enum en Java?
- 4. Java invierte un valor int sin usar la matriz
- 5. ¿Cómo puedo usar un valor entero como 'clave' para establecer el valor en NSMutableDictionary?
- 6. ¿Cómo puedo establecer el valor de texto de SimpleXmlElement sin usar su elemento principal?
- 7. ¿Puedo establecer un valor en una estructura a través de la reflexión sin boxeo?
- 8. Establecer una propiedad por reflexión con un valor de cadena
- 9. ¿Cómo puedo usar el valor de cadena de un valor enum de C# en una declaración de caso?
- 10. ¿Cómo puedo dividir una cadena en palabras en Java sin usar String.split()?
- 11. Java hashmaps sin el valor?
- 12. Analizando una fecha en python sin usar un valor predeterminado
- 13. Cómo usar Paperclip sin un archivo, solo con una cadena?
- 14. ¿Cómo puedo formatear un entero largo como una cadena sin separador en Java?
- 15. Cómo establecer el valor de cadena como nula
- 16. ¿Puedo usar una función para un valor predeterminado en MySql?
- 17. ¿Puedo establecer un valor de campo predeterminado de un EntityProxy?
- 18. ¿Puedo establecer un valor de propiedad con Reflection?
- 19. Establecer el fondo de UITableview en el constructor de interfaz?
- 20. ¿Puedo usar métodos de una clase sin instanciar esta clase?
- 21. ¿Establecer el valor predeterminado en un DataContract?
- 22. ¿Cómo puedo establecer el valor de una UILabel después de una segue?
- 23. ¿Puedo usar el algoritmo K-means en una cadena?
- 24. ¿Mide una cadena sin usar un objeto de Gráficos?
- 25. ¿Hay alguna forma de inicializar miembros de una estructura sin usar un constructor?
- 26. ¿Puedo usar el operador de canalización en F # para pasar un argumento a un constructor?
- 27. Cómo usar MethodInfo.Invoke para establecer el valor de propiedad?
- 28. En Java, ¿por qué no puedo declarar un miembro final (sin inicializarlo) en la clase principal y establecer su valor en la subclase? ¿Cómo puedo trabajar?
- 29. ¿Imposible establecer un atributo en una cadena?
- 30. ¿Puedo hacer un constructor que deserialice una versión de cadena de mi objeto?
Es ** siempre ** una mala idea. Si necesita cadenas mutables, use instancias 'StringBuilder' en su lugar. –