众所周知,String在java中是不可变的。但是,可以通过获取 Field 和设置访问级别来使用反射来更改它。 (我知道这是不明智的,我不打算这样做,这个问题是纯理论的)。
我的问题:假设我知道我在做什么(并根据需要修改所有字段),程序会正常运行吗?还是 jvm 进行了一些依赖于 String 不可变的优化?我会遭受性能损失吗?如果是这样,它做了什么假设?程序会出什么问题
附注String 只是一个示例,除了示例之外,我实际上对一般答案感兴趣。
谢谢!
最佳答案
编译后一些字符串可能引用一个实例,因此,您将编辑比您想要的更多的内容,并且永远不知道您还编辑了什么。
public static void main(String args[]) throws Exception {
String s1 = "Hello"; // I want to edit it
String s2 = "Hello"; // It may be anywhere and must not be edited
Field f = String.class.getDeclaredField("value");
f.setAccessible(true);
f.set(s1, "Doesn't say hello".toCharArray());
System.out.println(s2);
}
输出:
Doesn't say hello
关于java - 使用反射更改字符串的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932772/