String对象本身有没有什么办法可以修改? 我也找了一些资料,String对象创建出来之后就无法修改了? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你要修改a对象,还是常量池里面的“abcd”啊?这俩都能改,你要改a对象就从新new一个你要修改常量池里的“abcd”就写个外挂,找到abcd的内存地址,修改掉! String类是final,在java的定义中是不可变对象。 不能修改是因为String类没有提供修改内部char[] value;的方法,而且你不能通过继承去扩展它的特征。 用反射可以 public static void main(String[] args) throws Exception { final String str = "abcd"; System.out.println(str); edit(str, "efgh"); System.out.println(str); } public static void edit(final String str, String newValue) throws Exception { Field field = String.class.getDeclaredField("value"); field.setAccessible(true); field.set(str, newValue.toCharArray()); } 这个你别想了,java里String的设计就是不能修改的,如果你想出修改的办法了,那你就厉害了,可以到oracle公司寻求一个Java大神职位。而且为了防止修改String类的行为,把String设置成不能被继承的。 @see java.lang.reflect.AccessibleObject.setAccessible(boolean) @see java.lang.reflect.AccessibleObject.setAccessible(boolean)也行吧,我刚才说的太绝对了,收回。但反射不算是正常方法。楼主主要是不知道String是被设计成不能改的。 JDK7 以前不行吧, 测不了了, 好像是有个长度限制什么的 JDK7 以前不行吧, 测不了了, 好像是有个长度限制什么的java 8 测试通过。 明白了,感谢大家。我的类中有一个String,修改的时候,直接就让他=另一个引用了,我就怕如果能修改,在我的程序中把其中一个对象的修改了,到时候另一个对象也发生变化。 jre1.6下运行时LocaleData找不到 JDBC写法写报表,需要插件吗? 一道简单的课后习题 Swing组件内置了双缓冲,可是,如何使用?请牛人解答 java sql 游标??? 图像合成问题 关于中文字符串编译,本机测试OK,上传上去乱码!分不够再加 java中如何实现这个功能?请高手不吝赐教 [JDBC] 运行出现如下异常 java.sql.SQLException: Io 异常: Got minus one from a read call 这两种写法有什么区别?(简单问题,你一定会的) 如何将一个普通的java项目转换成Maven项目? 时间
这俩都能改,你要改a对象就从新new一个
你要修改常量池里的“abcd”就写个外挂,找到abcd的内存地址,修改掉!
public static void main(String[] args) throws Exception {
final String str = "abcd";
System.out.println(str);
edit(str, "efgh");
System.out.println(str);
} public static void edit(final String str, String newValue) throws Exception {
Field field = String.class.getDeclaredField("value");
field.setAccessible(true);
field.set(str, newValue.toCharArray());
}
而且为了防止修改String类的行为,把String设置成不能被继承的。
也行吧,我刚才说的太绝对了,收回。但反射不算是正常方法。楼主主要是不知道String是被设计成不能改的。
java 8 测试通过。
明白了,感谢大家。
我的类中有一个String,修改的时候,直接就让他=另一个引用了,我就怕如果能修改,在我的程序中把其中一个对象的修改了,到时候另一个对象也发生变化。