Вопреки распространенному мнению, возможно изменить содержимое объекта String в версиях JDK 1.5 и новее, но я (и, вероятно, все остальные здесь) настоятельно рекомендую его по многим причинам.Строки никогда не предназначались для изменения, и они просто не созданы для этого, что означает, что любая попытка сделать это быстро станет довольно грязной.Тем не менее, если вам это нужно в качестве абсолютного последнего средства, иначе мир может покончить с чем-то вроде этого, вот простой способ сделать это:
public static void main(String[] args) throws Exception {
String foo = "foo";
System.out.println("foo's hash value: " + foo.hashCode());
Field stringValueField = String.class.getDeclaredField("value");
stringValueField.setAccessible(true);
stringValueField.set(foo, "bar".toCharArray());
Field stringHashField = String.class.getDeclaredField("hash");
stringHashField.setAccessible(true);
stringHashField.set(foo, 0);
System.out.println("foo's new value: " + foo);
System.out.println("foo's new hash value: " + foo.hashCode());
}
Тем не менее, обратите внимание надругие поля в строке: смещение и количество.Вам также придется иметь дело с этими полями, в зависимости от того, как вы измените значение String.Наконец, и, возможно, самое главное, вы должны подумать о том, что произойдет, если вы измените внутреннюю строку .