通過Final修飾的String真的不可以修改嘛??


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM