2010-08-02 14 views

Respuesta

13

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.

2

Las cadenas son inmutables por lo que no puede cambiar el valor de una cadena ya creada.

4

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

0

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.

0

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.

+0

Es ** siempre ** una mala idea. Si necesita cadenas mutables, use instancias 'StringBuilder' en su lugar. –

1

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.

1

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.

Cuestiones relacionadas