1、String類是final的,不可被繼承。public final class String。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出南平免費(fèi)做網(wǎng)站回饋大家。
2、String類是的本質(zhì)是字符數(shù)組char[], 并且其值不可改變。private final char value[];
3、String類對(duì)象有個(gè)特殊的創(chuàng)建的方式,就是直接指定比如String x = "abc","abc"就表示一個(gè)字符串對(duì)象。而x是"abc"對(duì)象的地址,也叫做"abc"對(duì)象的引用。
4、String對(duì)象可以通過(guò)“+”串聯(lián)。串聯(lián)后會(huì)生成新的字符串。也可以通過(guò)concat()來(lái)串聯(lián),這個(gè)后面會(huì)講述。
6、Java運(yùn)行時(shí)會(huì)維護(hù)一個(gè)String Pool(String池),JavaDoc翻譯很模糊“字符串緩沖區(qū)”。String池用來(lái)存放運(yùn)行時(shí)中產(chǎn)生的各種字符串,
并且池中的字符串的內(nèi)容不重復(fù)。而一般對(duì)象不存在這個(gè)緩沖池,并且創(chuàng)建的對(duì)象僅僅存在于方法的堆棧區(qū)。
5、創(chuàng)建字符串的方式很多,歸納起來(lái)有三類:
其一,使用new關(guān)鍵字創(chuàng)建字符串,比如String s1 = new String("abc");
其二,直接指定。比如String s2 = "abc";
其三,使用串聯(lián)生成新的字符串。比如String s3 = "ab" + "c";
由于String在Java世界中使用過(guò)于頻繁,Java為了避免在一個(gè)系統(tǒng)中產(chǎn)生大量的String對(duì)象,引入了字符串常量池。其運(yùn)行機(jī)制是:創(chuàng)建一個(gè)字符串時(shí),首先檢查池中是否有值相同的字符串對(duì)象,如果有則不需要?jiǎng)?chuàng)建直接從池中剛查找到的對(duì)象引用;如果沒(méi)有則新建字符串對(duì)象,返回對(duì)象引用,并且將新創(chuàng)建的對(duì)象放入池中。但是,通過(guò)new方法創(chuàng)建的String對(duì)象是不檢查字符串池的,而是直接在堆區(qū)或棧區(qū)創(chuàng)建一個(gè)新的對(duì)象,也不會(huì)把對(duì)象放入池中。上述原則只適用于通過(guò)直接量給String對(duì)象引用賦值的情況。博客
舉例:String str1 = "123"; //通過(guò)直接量賦值方式,放入字符串常量池
String str2 = new String(“123”);//通過(guò)new方式賦值方式,不放入字符串常量池
注意:String提供了inter()方法。調(diào)用該方法時(shí),如果常量池中包括了一個(gè)等于此String對(duì)象的字符串(由equals方法確定),則返回池中的字符串。否則,將此String對(duì)象添加到池中,并且返回此池中對(duì)象的引用。
StringBuffer和StringBuilder都實(shí)現(xiàn)了AbstractStringBuilder抽象類,擁有幾乎一致對(duì)外提供的調(diào)用接口;其底層在內(nèi)存中的存儲(chǔ)方式與String相同,都是以一個(gè)有序的字符序列(char類型的數(shù)組)進(jìn)行存儲(chǔ),不同點(diǎn)是StringBuffer/StringBuilder對(duì)象的值是可以改變的,并且值改變以后,對(duì)象引用不會(huì)發(fā)生改變;兩者對(duì)象在構(gòu)造過(guò)程中,首先按照默認(rèn)大小申請(qǐng)一個(gè)字符數(shù)組,由于會(huì)不斷加入新數(shù)據(jù),當(dāng)超過(guò)默認(rèn)大小后,會(huì)創(chuàng)建一個(gè)更大的數(shù)組,并將原先的數(shù)組內(nèi)容復(fù)制過(guò)來(lái),再丟棄舊的數(shù)組。因此,對(duì)于較大對(duì)象的擴(kuò)容會(huì)涉及大量的內(nèi)存復(fù)制操作,如果能夠預(yù)先評(píng)估大小,可提升性能。
5.1 String類是典型的Immutable類
是典型的 Immutable 類,被聲明成為 final class,所有屬性也都是 final 的。也由于它的不可變,類似拼接、裁剪字符串等動(dòng)作,都會(huì)產(chǎn)生新的 String 對(duì)象。
5.2 字符串設(shè)計(jì)和實(shí)現(xiàn)考量
5.3 字符串緩存
6.1 可以緩存 hash 值 博客
因?yàn)?String 的 hash 值經(jīng)常被使用,例如 String 用做 HashMap 的 key。不可變的特性可以使得 hash 值也不可變,因此只需要進(jìn)行一次計(jì)算。
6.2 String Pool 的需要
如果一個(gè)String對(duì)象已經(jīng)被創(chuàng)建過(guò)了,那么就會(huì)從 String Pool 中取得引用。只有 String 是不可變的,才可能使用 String Pool。
6.3 安全性
String 經(jīng)常作為參數(shù),String 不可變性可以保證參數(shù)不可變。例如在作為網(wǎng)絡(luò)連接參數(shù)的情況下如果 String 是可變的,那么在網(wǎng)絡(luò)連接過(guò)程中,String 被改變,改變 String 對(duì)象的那一方以為現(xiàn)在連接的是其它主機(jī),而實(shí)際情況卻不一定是。
6.4 線程安全
String 不可變性天生具備線程安全,可以在多個(gè)線程中安全地使用。
當(dāng)前題目:Java中的String類是什么
路徑分享:http://www.rwnh.cn/article42/gpoiec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、建站公司、手機(jī)網(wǎng)站建設(shè)、定制網(wǎng)站、靜態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)