Android面試專題系列(二):爲什麼說 String是不可變的?

不詩意的女程序媛不是好廚師~
轉載請註明出處,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是不可變的。

積累點滴,做好自己~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章