3回复
4年前
这个反射的结果有点怪啊,大佬们谁能帮我看看
最近写业务代码发现一个问题,反射的结果有点奇怪。我模拟业务写了一个测试代码,把问题复现了,大佬们帮我看看呗。
public class Test{
private final String str = "ss";
private final String str2;
Test(){
str2 = "ss";
}
public static void main(String[] args) throws Exception {
Test test = new Test();
Field str = Test.class.getDeclaredField("str");
str.setAccessible(true);
str.set(test, "xxx");
System.out.println(test.str);
Field str2 = Test.class.getDeclaredField("str2");
str2.setAccessible(true);
str2.set(test, "xxx2");
System.out.println(test.str2);
}
}
这个程序执行下来的话,我们想得到的输出应该是
xxx
xxx2
但是我们得到的输出却是
ss
xxx2
我用的是jdk8,这个输出为什么这样?而且如果str1修改失败了,那么为什么str2修改成功了?
3607 阅读