1. 程式人生 > 實用技巧 >關於Java 的 String 物件是不可修改的嗎,為什麼?

關於Java 的 String 物件是不可修改的嗎,為什麼?

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

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

publicstaticvoidmain(String[]args)throws NoSuchFieldException, IllegalAccessException{
vars="sc";
varaClass=s.getClass();
varvalue=aClass.getDeclaredField("value");
value.setAccessible(true);
value.set(s,"cs".getBytes());
System.err.println(s);
}

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

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

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