修改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());
    }
}

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

 

上一篇:Redis的各种数据类型到底能玩出什么花儿


下一篇:C#获取枚举的描述