首頁>技術>

常規的角度來說,Java 裡的 String 物件確實是不可修改的。對於理由,常規回答可能是:因為 final 關鍵字限制了對物件的修改。不過對於這個答覆我覺得既不是完全準確,也沒有回答到核心點。

如下這段程式碼就可以實現對 String 物件的修改。

public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {    var s = "sc";    var aClass = s.getClass();    var value = aClass.getDeclaredField("value");    value.setAccessible(true);    value.set(s, "cs".getBytes());    System.err.println(s);}

只是針對 final 的限制來回答是否可以修改,就留於表面了。

我對於這個問題的回答是:從常規的角度來說,String 物件確實不可修改。其原因是 String 類並沒暴露出其底層的資料結構,所以我們無法直接修改資料來實現修改物件的效果。我們呼叫 String 物件的方法時,該類的實現者控制了每次都返回新的物件。

實現者採用了函數語言程式設計的思想實現了 String 類的部分方法。這裡體現了函數語言程式設計的重要特徵:"函數語言程式設計對程式中的賦值進行了限制和規範。"

14
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 「少前:雲圖計劃」大演算法評價以及演算法搭配推薦