String源碼學習感悟

今天學習了一下String的源碼。下面是個人學習感悟。java

1.web

String str = "ABC";

Char[] data = {'A','B','C'};
String str = new String(data);

這兩個是同樣的。也就是說:String的底層就是字符的數組。數組

2.緩存

java提供了特殊的運算符'+',這個運算符能夠用來將兩個String類型的字符串相加得到新的字符串。安全

String str1 = "AAA";
String str2 = "BBB';
String str = str1 + str2;

 實際上,這個是將str1變成了stringBuilder1,str2變成了stringBuilder2,而後運行stringBuilder = stringBuilder1.append(stringBuilder2),得到的結果爲stringBuilder.toString();就變成了str。app

3.學習

public final class String implements Serializable,Comparable,CharSequence{


}

 這個是源碼的第一行,定義了String類是個final類,它不能被任何的類繼承,同時String類實現了Serializable、Comparable、CharSequence接口。這就意味着String類裏面有這三個接口聲明的方法。ui

4.spa

屬性:
private final char value[];

 經過final來看,咱們知道,String一旦被初始化,就不能被更改線程

 

第二個屬性:
private int hash;

 緩存的字符穿hashCode 默認爲0

第三個屬性:
private static final long serialVersionUID = -6849794470754667710L; private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];

 String 擁有序列化和反序列化的功能,這個功是實現了Serializable接口的,

5.

StringBuffer和StringBuilder的功能差很少,只不過StringBuilder更快,而StringBuffer更安全。

官方文檔是說StringBuffer的toString方法是同步的,犧牲了效率保證了線程的安全。

6.

其它方法:

7.

public native String intern();

 native的意思是生成動態連接庫文件,能夠更快速的訪問。

intern()方法是返回一個字符串對象的內部引用,當intern()被調用的時候,會先在常量池中尋找,若是常量池中有這樣一個相等的字符串,則返回常量池中的實例,反之則在常量池中建立字符串,而後返回這個字符串的引用

8.

 

int i = 5;
String i1 = ""+i;
String i2 = String.valueOf(i);
String i3 = Integer.toString(i);

第三行的底層也是按照第四層來執行的。意思就是說第三層和第四層是同樣的。而第二層則是先建立一個StringBuilder,在執行stringBuilder.append(i),再調用toString()方法

相關文章
相關標籤/搜索