谁可以解释这奇怪的结果
本帖最后由 565123 于 2013-10-10 13:28 编辑package test;
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) {
changeString("123", "456");
System.out.println("123");
}
private static void changeString(String s, String sample)
throws NullPointerException {
changeString(s, sample.toCharArray());
}
private static void changeString(String str, char[] chs)
throws NullPointerException {
if (str == null)
throw new NullPointerException("s cannot be null.");
Field field = null;
try {
field = String.class.getDeclaredField("value");
field.setAccessible(true);
field.set(str, chs);
} catch (Exception e) {
e.printStackTrace();
}
}
}测试看看鱼油们的水平!!
是不是运行起来和预期的结果不一样! 快来啊!!怎么没人啊 路过,打酱油。{:5_103:} JAVA啊 呜呜 看不懂 {:7_155:}顶顶{:7_155:} 看不懂。。 冰菓 发表于 2013-11-20 08:50 static/image/common/back.gif
看不懂。。
大家可以自行运行一下啊 因为前后"123"是同一个对象 而这个对象的值你通过反射赋予新值了啊 还能这样换。。。。 打个酱油哇 我还是打酱油的啊 {:5_109:}wo shi guonlai na yu bi de 不明觉厉.. 可能是因为String是一个不可变字符串,当输出“123”的时候是去常量池里去找,通过爆力反射改掉了常量池里的值,那么输出的就是改变后的值了,底层代码略微看了一下。应该就是酱紫吧 支持楼主的jpg :huffy: 看不懂 http://docs.oracle.com/javase/7/docs/api/在这里面查:java.lang.reflect里面的方法
页:
[1]