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