通过反射,重新给String中的value属性赋值,从而达到改变String的值的效果。

public class Main{

public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
String str = "abc";
System.out.println(str); // abc
fanshe(str);
System.out.println(str); // abcd
}

private static void fanshe(String str) throws NoSuchFieldException, IllegalAccessException {
Class<? extends String> strClass = str.getClass();
Field value = strClass.getDeclaredField("value");
value.setAccessible(true); // 既可以破坏,private的私有性
value.set(str, new char[]{'a', 'b', 'c', 'd'}); // 也可以破坏final的不可修改性
}
}