摘要:什么是不可變對象如果一個對象,在它創建完成后,不能在改變它的狀態,那么這個對象就是不可變的。而在中,是封裝的數組,是在這個數組中的起始位置,是所占的字符的個數。
這是之前在網上看到的一個問題,我就是總結一下。
什么是不可變對象:
如果一個對象,在它創建完成后,不能在改變它的狀態,那么這個對象就是不可變的。不能改變這個對象的狀態就是:不改變對象內的成員變量,包括基本數據類型的值不能改變,引用類型的變量不能指向其他的對象,引用類型指向的對象的狀態也不能改變。
String類是一個final類,是不能被繼承的
區分對象和對象的引用
public class Person { public static void main(String[] args) { String s = "abcd"; System.out.println("s = "+s); s = "123456"; System.out.println("s = "+s); } }
這里的s看上去被改變了,但是s卻是String對象的引用,它指向了一個具體的對象,而s的改變其實就是它所指向的對象發生了改變。
private final char value[];
//String是將輸入的字符串封裝為字符數組value[]就是這個數組的長度
private int hash;
//是對象的哈西值的緩存
以上是JDK 1.7中的String源代碼,由以上代碼可以看出
String其實就是對字符數組的封裝,在java中數組也是對象,value也只是一個引用,它指向了一個真正的數組對象。而在JDK 1.6中, value是String封裝的數組,offset是String在這個value數組中的起始位置,count是String所占的字符的個數。也可以得出這個結論的
并且我們發現value,offset,count都是private final,并且類中也沒有提供get()和set()方法。這點也可以看出String是無法修改的.
謝謝:http://www.importnew.com/16817.html提供的文章
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66183.html
摘要:性能當字符串是不可變時,字符串常量池才有意義。字符串常量池的出現,可以減少創建相同字面量的字符串,讓不同的引用指向池中同一個字符串,為運行時節約很多的堆內存。 在學習Java的過程中,我們會被告知 String 被設計成不可變的類型。為什么 String 會被 Java 開發者有如此特殊的對待?他們的設計意圖和設計理念到底是什么?因此,我帶著以下三個問題,對 String 進行剖析: ...
摘要:我們都知道中的類的設計是不可變的,來看下類的源碼。其值也就是對字符數組的封裝,即,其值被定義成的,說明不能通過外界修改,即不可變。真的不可變嗎來看下面這個例子。所以說,這里的字符串并不是可變,只是變更了字符串引用。 我們都知道 Java 中的 String 類的設計是不可變的,來看下 String 類的源碼。 public final class String implemen...
摘要:但是通過構造函數的并不是。通過構造函數創建的變量在機制上與其他對象一致,都是在上創建新的對象,然后把引用賦給變量。此外,的方法和等方法實現均是調用了構造函數創建了新的對象,所以他們返回的也都是存在于上的新對象。 String經常在一個語言中或多或少都有些特殊地位。在Java亦不例外。今天先來討論,String是不可變的。 String是引用類型,String變量儲存一個地址,地址指向內...
摘要:所有變量的類型在編譯時已知在程序運行之前,因此編譯器也可以推導出所有表達式的類型。像變量的類型一樣,這些聲明是重要的文檔,對代碼讀者很有用,并由編譯器進行靜態檢查。對象類型的值對象類型的值是由其類型標記的圓。 大綱 1.編程語言中的數據類型2.靜態與動態數據類型3.類型檢查4.易變性和不變性5.快照圖6.復雜的數據類型:數組和集合7.有用的不可變類型8.空引用9.總結 編程語言中的數據...
摘要:與都繼承自類,在中也是使用字符數組保存字符串,,這兩種對象都是可變的。采用字節碼的好處語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。 String和StringBuffer、StringBuilder的區別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區別 可變性...
閱讀 1993·2021-11-24 10:45
閱讀 1850·2021-10-09 09:43
閱讀 1291·2021-09-22 15:38
閱讀 1219·2021-08-18 10:19
閱讀 2837·2019-08-30 15:55
閱讀 3057·2019-08-30 12:45
閱讀 2962·2019-08-30 11:25
閱讀 356·2019-08-29 11:30