Fork me on gieee

修改String的值,地址不发生改变

String在进行字符串拼接时,会把值存在常量池中,这时候地址就会发生改变

String底层维护了一个char[]类型的数组,所以可以通过反射去暴力修改里面的值

 

public class lovertc{

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        String str = "初始值";
        System.out.println(str+"--"+str.hashCode());

        //通过反射获取属性
        Field field = str.getClass().getDeclaredField("value");
        //开启属性更改
        field.setAccessible(true);
        //将原有属性重新设值
        field.set(str,new char[]{'','',''});
        System.out.println(str+"--"+str.hashCode());
    }
}

 

posted @ 2021-11-30 21:29  lovertc  阅读(499)  评论(0)    收藏  举报