天天看點

我對java String的了解 及 源碼淺析一.char說起到String二.String的認識及源碼淺析

這也是自己第二次回過頭來啃java基礎書,小生自認為愚昧無知。如果大神有好的教育,可以評論私信。以下都是我的看法:

為什麼說char

呢,我這裡先賣個關子。在java中,char是用unicode編碼的,占16位(2位元組)。從ansi編碼(1位元組)到unicode編碼(2字

節)。java中使用unicode的原因是,java的applet(網頁)運作,unicode裡面包含最多最廣比如:中

文,english,spanish,german, french等。是以,char屬于java的基本類型之一,使用也很友善。

這裡我就解答則個關子,剛才為啥說string和char密切相關。因為java字元串string就是char值序列(其實就是final的char數組)組成。在源碼中很好的證明了這一點:

為了證明上面的東西,大家可以來寫一段好玩的代碼:

運作後你可以看到以下輸出:

但有些人不要誤解,比如java的

以為它就是想c語言中的 char name[]="jeff li"; 這種認知是錯誤的,其他它更像char*指針:

最常見的也是最經常被使用的 boolean equals()分析,源碼如下:

從源碼中慢慢道來:例子(a.equals(b))

第一:if (this == anobject)

//this代表a,其實就是判斷其b對象是否和a的引用型變量表示的是兩個變量在堆中存儲的位址(就是棧引用一樣内容自然一樣)。

第二: if (anobject instanceof string)

//java 中的instanceof 運算符是用來在運作時指出對象是否是特定類的一個執行個體。這句話為了下面強轉 string anotherstring = (string) anobject;

第三:我剛開始有些疑惑源碼中的:我覺得是string類型的anotherstring擷取到char值序列(char[]),這就回到了前面内容。

猜測是如上意思,如果大牛有的可以說的地方,請說。因為我自己想實作一個簡單的stringcopy時,這個老是不行,不知道為什麼。

第四:剩下的就是char[]直接循環比較了。

還有些常用的 split (正則) format 這裡不發表一一看法了。

另外有一句很好的代碼分享:來自org.apache.commons.lang