Burada daha önce yanıtlandığı gibi, String
örnekler değişmez . StringBuffer
ve StringBuilder
sen parçacığı güvenli olup olmayacağını gerekip gerekmediğini değişken ve böyle bir amaç için uygundur.
Ancak bir Dize değiştirmek için bir yol var ama güvensiz, güvenilmez ve hile olarak kabul edilebilir çünkü asla tavsiye etmem: String nesnesinin içerdiği iç diziyi değiştirmek için yansıma kullanabilirsiniz char
. Yansıma , normalde geçerli kapsamda gizlenen alanlara ve yöntemlere erişmenizi sağlar (özel yöntemler veya başka bir sınıftan alanlar ...).
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();
}
}