中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的字符串類型String有哪些特點

發布時間:2022-02-19 15:45:19 來源:億速云 閱讀:213 作者:iii 欄目:開發技術

這篇文章主要介紹“Java的字符串類型String有哪些特點”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java的字符串類型String有哪些特點”文章能幫助大家解決問題。

一、概念

String代表字符串,java語言中所有雙引號的字符串都是String的對象,不管是否是new出來的對象。

二、特點

1.String類由于被final修飾,因此其不能被繼承,注意一下哈,我開始也以為字符串不能夠改變是因為其被final修飾,事實上并不是這樣,String底層是用char數組保存,它被final修飾只是不能夠改變地址指向,但是其內容是可以改變的。因此字符串不能改變和其是否被final修飾沒有關系。

2.字符串由于不能被改變,因此其能共享使用。

3.字符串底層使用char[]數組存儲。

三、三種構造方式:

1.public String():創建空字符串對象

2.public String(char[] array):使用char數組創建字符串

3.public String(byte[] array):使用byte數組創建字符串,這種方式將對應數字按照ASCII碼轉成字符,如97代表字符a
一種直接創建:String str = “abc”

四、字符串常量池

在jdk1.6及之前,字符串常量池是在方法區內,jdk1.7及之后字符串常量池從方法區分離出來,存儲在堆中。

jdk1.6和jdk1.7的相同點:

1.用雙引號創建字符串在JVM運行時都直接在字符串常量池中創建字符串對象,但是不會在堆中創建對象;

2.new一個字符串對象(String s = new String(“abc”)),這里面涉及兩個對象的創建,一個是堆對象,一個是字符串常量池中的對象(“abc”是用雙引號的),如果字符串常量池存在與該字符串相同的對象(這里是指內容相同,而不是地址)則只需要創建一個堆對象,如果字符串常量池沒有相同的對象,那么需要在字符串常量池和堆內都要創建對象,注意一點:這兩個對象之間不存在引用,即其中一個對象保存的值是另一個對象的地址。

String test1 = "test";
        String test3 = "test";
        String test2 = new String("test");
    
        System.out.println(test1 == test2);//false
        System.out.println(test1 == test3);//true

第一個輸出是false是因為test1是字符串常量池中的對象,而test2是堆中的對象,因此他們的地址是不相等,故結果是false;第二個輸出為true是因為當用雙引號創建字符串時,首先會去字符串常量池中查找是否存在值相同得到對象,如果存在就直接返回引用地址,如果不存在才創建對象,因此test1和test3指向的是同一個地址。

jdk1.6和jdk1.7的不同點:

jdk1.6的字符創常量池存儲是對象,jdk1.7字符常量池中既可以存儲對象,又可以存儲對象的引用。

還需要明確一點:
使用引號包含文本的方式創建的String對象之間使用“+”連接產生的新對象才會被加入字符串池中,對于所有包含new方式新建對象(包括null)的“+”連接表達式,它所產生的新對象都不會被加入字符串池中

String s6 = new String("go") +new String("od");
        String s7 = s6.intern();
        String s8 = "good";
        System.out.println(s6 == s7);//true
        System.out.println(s7 == s8);//true
        System.out.println(s6 == s8);//true

右上面的介紹可知,s6指向的是堆中字符串good對象的地址,且這個對象沒有在字符串常量池中被創建,當執行到 String s7 = s6.intern();時由于字符創常量池沒有這個對象,且堆中存在該對象,因此在字符串常量池中創建一個引用指向堆中的對象,所以s6和s7指向同一個對象,如果是jdk1.6,會直接在字符串常量池創建一個對象然后返回這個對象的引用,此時s6和s7指向的是不同的對象。

 String s2 = new String("lo") + new String("ng");
        String s3 =  s2.intern();
        System.out.println(s2 == s3);//false

這里按照上面的分析應該返回true,但是這里返回false。

關于“Java的字符串類型String有哪些特點”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潜江市| 合江县| 拜城县| 兴仁县| 景洪市| 明水县| 水富县| 呼伦贝尔市| 玉门市| 禹城市| 安康市| 宁晋县| 云梦县| 崇阳县| 始兴县| 齐河县| 防城港市| 黄龙县| 余姚市| 磐安县| 遂昌县| 南安市| 苏尼特左旗| 梁山县| 运城市| 临泽县| 汉川市| 肃宁县| 琼海市| 阳城县| 桐梓县| 舟山市| 新兴县| 普洱| 凤阳县| 白河县| 霍州市| 汝城县| 金沙县| 彭水| 五寨县|