不詩意的女程序媛不是好廚師~
轉載請註明出處,From李詩雨—https://blog.csdn.net/cjm2484836553/article/details/105122807
《Android面試專題系列二》:爲什麼說 String是不可變的?)
1.從源碼角度來看
從源碼的角度,我們可以發現一些 String是不可變的 線索:
2.從代碼的運行結果來看
請看如下代碼:
String str = new String("abc");
System.out.println(str.hashCode());
str += "a";
System.out.println(str.hashCode());
str += "b";
System.out.println(str.hashCode());
String str2="abcab";
System.out.println(str2.hashCode()+" "+str.hashCode());
我們運用反證法來證明:
-
①假如
String
是可變的,那str
一開始是“abc”
,後來增加了一個字符變成了“abca”
,再後來又變成了“abcab”
.如果String是可變的,那str對象還是之前的str,str只是改變了內容,它應該還是之前的它,那它的hashcode值應該是不變的。
-
②假如String是可變的,由於str不是一開始就是“abcab”的,那最後的str 和 str2 應該不是同一個對象,hashcode值也不應該相同纔是。
但是!!!最終代碼運行結果卻和我們假設的恰恰相反!!!
假設不成立!
所以說,String是不可變的。
積累點滴,做好自己~