本帖最后由 奚华 于 2012-11-18 09:37 编辑
李连闯 发表于 2012-11-18 09:13
看了看这个,确实是可以修改的,
set(obj,value)方法的文档中确实有说明:
对于设置setAccessible(true)及n ... - import java.lang.reflect.Field;
- public class StringChange {
-
- static String str="ABC";
- /**
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
-
- System.out.println("---打印改变前的str字符串的值---");
- System.out.println(str);//打印出来ABC
-
- change(str);//改变String变量的值
-
- System.out.println("---打印改变后的str字符串的值---");
- System.out.println(str);//打印出来DSWQ,长度改变了
-
- }
-
- /**
- * 该方法运用反射原理改变了传入的参数的值,具体来说就是改变了字符串的值
- * @param str
- * @throws Exception
- */
- public static void change(String str)throws Exception
- {
- Class cls=str.getClass();//获得str的Class对象
- Field fil=cls.getDeclaredField("value");//获得String类中的char数组value[]的Filed变量
- fil.setAccessible(true);//由于value变量是一个private的所以设置权限
-
- char[] ch={'D', 'S','W','Q'};
- fil.set(str, ch);//改变value所指向的数组,使value指向ch数组
- }
- }
复制代码 |