String不可變的解惑

    在Java中, String類是不可變的。那麼到底什麼是不可變的對象呢? 可以這樣認爲:如果一個對象,在它創建完成之後,不能再改變它的狀態,那麼這個對象就是不可變的。不能改變狀態的意思是,不能改變對象內的成員變量,包括基本數據類型的值不能改變,引用類型的變量不能指向其他的對象,引用類型指向的對象的狀態也不能改變。

區分對象和對象的引用

    對於Java初學者, 對於String是不可變對象總是存有疑惑。看下面代碼:

String s1 = "javaSE";
System.out.println(s1);
s1 = "123456";
System.out.println(s1);
打印出來 s1 = "javaSE"  , s1 = "123456"

    首先創建一個String對象s,然後讓s的值爲“java”, 然後又讓s的值爲“123456”。 從打印結果可以看出,s的值確實改變了。那麼怎麼還說String對象是不可變的呢? 其實這裏存在一個誤區: s只是一個String對象的引用,並不是對象本身。對象在內存中是一塊內存區,成員變量越多,這塊內存區佔的空間越大。引用只是一個4字節的數據,裏面存放了它所指向的對象的地址,通過這個地址可以訪問對象。 也就是說,s只是一個引用,它指向了一個具體的對象,當s=“123456”; 這句代碼執行過之後,又創建了一個新的對象“123456”, 而引用s重新指向了這個心的對象,原來的對象“JavaSE”還在內存中存在,並沒有改變。

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