我们都知道 String 在 java 中是不可变的——一旦创建了字符串,内容就不能改变。
String 使用字符数组char[] value
来存储字符串内容,这里是java代码 -
/** The value is used for character storage. */
private final char value[];
如果我们可以访问该字段values[]
并对其进行更改怎么办?看到这个代码 -
String name = "Harish";
System.out.println(name); // Harish
Field field = name.getClass().getDeclaredField("value");
field.setAccessible(true);
char[] value = (char[]) field.get(name);
value[0] = 'G';
value[1] = 'i';
System.out.println(Arrays.toString(value)); // [G, i, r, i, s, h]
System.out.println(name); // Girish
这样,我认为,我们可以更改违反字符串不变性原则的字符串内容。
我错过了什么吗?