Como se respondió anteriormente aquí, las String
instancias son inmutables . StringBuffer
y StringBuilder
son mutables y adecuados para tal fin, ya sea que necesite ser seguro para subprocesos o no.
Sin embargo, hay una forma de modificar una Cadena, pero nunca la recomendaría porque no es segura, no es confiable y puede considerarse como trampa: puede usar la reflexión para modificar la char
matriz interna que contiene el objeto Cadena. Reflection le permite acceder a campos y métodos que normalmente están ocultos en el ámbito actual (métodos privados o campos de otra clase ...).
public static void main(String[] args) {
String text = "This is a test";
try {
//String.value is the array of char (char[])
//that contains the text of the String
Field valueField = String.class.getDeclaredField("value");
//String.value is a private variable so it must be set as accessible
//to read and/or to modify its value
valueField.setAccessible(true);
//now we get the array the String instance is actually using
char[] value = (char[])valueField.get(text);
//The 13rd character is the "s" of the word "Test"
value[12]='x';
//We display the string which should be "This is a text"
System.out.println(text);
} catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}