java中String s=”abc“及String s=new String("abc")詳解

 
首先,我們先來看一下java中變量的語義:

java的變量有兩種語義,原始類型的變量是值語義(value),也就是說,你給一個原始類型變量賦值,就改變了這個數據值本身。對象類型的變量是引用語義,也就是說,給一個對象類型的變量賦值只是讓它指向另一個對象,但不改變原來引用的那個對象的值。

然後,我們瞭解一下String的特性以及java對於Sting特別的處理方式:

《String的特性》

1、String類是final的,不可被繼承。


2、String類是的本質是字符數組char[], 並且其值不可改變。


3、String類對象有個特殊的創建的方式,就是直接指定比如String x = "abc","abc"就表示一個字符串對象。而x是"abc"對象的地址,也叫做"abc"對象的引用。


4、String對象可以通過“+”串聯。串聯後會生成新的字符串。


5、Java運行時會維護一個String Pool(String池),JavaDoc翻譯很模糊“字符串緩衝區”。String池用來存放運行時中產生的各種字符串,並且池中的字符串的內容不重複。而一般對象不存在這個緩衝池,並且創建的對象僅僅存在於方法的堆棧區。

 

 6、創建字符串的方式很多,歸納起來有三類:
其一,使用new關鍵字創建字符串,比如String s1 = new String("abc");
其二,直接指定。比如String s2 = "abc";
其三,使用串聯生成新的字符串。比如String s3 = "ab" + "c";
 
《String對象的創建》
 
String對象的創建也有很多門道,關鍵是要明白其原理。


原理1:當使用任何方式來創建一個字符串對象s=X時,Java運行時(運行中JVM)會拿着這個X在String池中找是否存在內容相同的字符串對象,如果不存在,則在池中創建一個字符串s,否則,不在池中添加。
 
原理2:Java中,只要使用new關鍵字來創建對象,則一定會(在堆區或棧區)創建一個新的對象。
 
原理3:使用直接指定或者使用純字符串串聯來創建String對象,則僅僅會檢查維護String池中的字符串,池中沒有就在池中創建一個,有則罷了!但絕不會在堆棧區再去創建該String對象。
 
原理4:使用包含變量的表達式來創建String對象,則不僅會檢查維護String池,而且還會在堆棧區創建一個String對象。

發佈了209 篇原創文章 · 獲贊 6 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章