String類不可變的含義
String對象建立之後便不會再改變,任何看起來的變化都是通過建立新的String對象來完成的。
舉例:
String a = new String("abc");
a = a + "d";
第一個語句建立了一個String 對象abc,a是指向這個對象的引用
第二個語句右邊建立了另外一個String對象abcd;
執行第二個語句時,并不會修改原先的對象abc;
不可變是如何實作的
這裡有三個關鍵點:
1、String類被final修飾,不可被繼承;因為一旦允許繼承的化,那麼方法就有可能被重寫,也就有可能會破壞不可變性,這就是為什麼用final修飾的原因;
2、private final修飾char[] 數組;字元串底層使用字元數組來存儲,這個字元數組通過private final修飾,防止外部對字元串做出改變;
3、String類種的任何方法都不會對字元串進行改動;
為什麼設計為不可變的
主要還是為了性能方面的考慮,因為在java語言設計之初,就認為String将會被頻繁的使用,是以設定了常量池,目的是為了盡可能的複用已有對象,這就要求已有對象是不可變的;
當然設計成不可變對象,一定程度上也可以增加代碼的安全性,比如可變對象作為hashMap的key時,如果先放入map之後,再改變對象,那麼可能就會破壞Map對key的唯一性要求;
零基礎學習Java程式設計,可以加入我的十年Java學習園地。技術交流,資源共享,解疑答惑,經驗分下。