在學習Java的時候經常看到說通過Final修飾的東西是不可以修改的
那么今天我們來看下通過Final修飾的字符串可能修改嘛
final String s = "abc";
目的是將它修改成akc,就是修改了中間的字符
到這里大家先回顧下學習反射的知識,在編寫一個類的時候,每 個類里面都是有屬性存在。
但是通過反射機制是可以獲取到里面的屬性的
Field field = clazz.getDeclaredField("children");
在反射里面還有一個可以設置安全的一個方法setAccessible
大家還記的這個方法嘛
思路:
- 在String中用於保存字符串是一個char類型的數組
- 我們就獲取出來這個屬性
- 修改這個字段的Accessible
- 修改數組中的值
public static void main(String[] args) {
final String s = "abc";
try {
Field value = s.getClass().getDeclaredField("value");
value.setAccessible(true);
char[] o = (char[])value.get(s);
o[1] = 'k';
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}