我们都知道 String 类型是不可变的
对 String 的任何操作,都是生成新的 String ,然后返回给我们的
那有么有办法,修改 String 的 value 值呢?
答案是有的,需要我们用到反射的技巧:
public class Demo1 {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
String str = "abc";
Class clazz = String.class;
// private final char value[];
// 这里因为 value 数组是 private 类型的,必须要用 getDeclaredField 获取
Field value = clazz.getDeclaredField("value");
// 设置访问权限,让外部也可以访问 private 属性
value.setAccessible(true);
// 修改
value.set(str,new char[]{'k','k','k'});
System.out.println(str);
}
}
运行结果如下:



