众所周知,String 类是不可变对象,那么是否有方法改变它呢?
String的成员变量都是private final的,即为初始化之后不可改变,但是其中value比较特殊,因为它是一个引用变量,value是final修饰的,也就是说final不能再指向其他数组对象,既然改变value指针的指向不可能,那么能否改变value指向的数组元素吗?比如改变数组中的s,使其变成n,由于String中的所有成员变量都是private的,因此不能通过通常的方法进行访问。但是反射机制可以访问到private成员变量,这就使得更改value数组变为可能
public static void Reflection() throw Exception {
String n= "helloworld";
System.out.println("n = " + n)
Field valueField = String.class.getDeclaredField("value")
// 改变value属性的访问权限
valueField.setAccessble(true)
//获取s对象的value属性的值
char[] value = (char[])valueField.get(s)
//改变索引所对应字符
value[1] = 's'
}