如何證明字串是不可變的
字串不可變的這個事我曾寫過兩篇文章,寫到最後我都要吐了。但還是會有一些同學搞不明白,隔段時間就有人私訊我,我就得把之前的文章放到收藏夾,問的時候我就把連結發給他。
之所以造成這個混亂,有很多因素,比如說,Java 到底是值傳遞還是引用傳遞?字串常數池是個什麼玩意?
這次又不得不談,雖然煩透了,但仍然要證明啊!
public class StringImmutabilityTest { public static void main(String[] args) { String s1 = "沉默王二"; String s2 = s1; System.out.println(s1 == s2); s1 = "沉默王三"; System.out.println(s1 == s2); System.out.println(s2); } }
輸出結果如下所示:
true false 沉默王二
1)String s1 = "沉默王二",Java 在字串常數池中創建“沉默王二」這串字元的對象,並且把位址引用賦值給s1
2)String s2 = s1,s2 和s1 指向了同一個位址引用——常數池中的那個「沉默王二」。
所以,此時 s1 == s2 為 true。
3)s1 = "沉默王三",Java 在字串常數池中創建「沉默王三」這串字元的對象,並且把地址引用賦值給s1,但s2 仍然指向的是“沉默王二」那串字元物件的位址引用。
所以,此時 s1 == s2 為 false,s2 的輸出結果為「沉默王二」就證明了字串是不可變的。
以上是java如何證明字串是不可變的的詳細內容。更多資訊請關注PHP中文網其他相關文章!