中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Java中的String類是什么

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問(wèn)題答疑

  • String字符串是如何設(shè)計(jì)與實(shí)現(xiàn)考量的?String字符串緩存 intern()方法,由永久代移到堆中。String 的演化,Java 9 中底層把 char 數(shù)組換成了 byte 數(shù)組,占用更少的空間。在java中,String類是不可變的,對(duì)String類的任何改變,都是返回一個(gè)新的String類對(duì)象。

二. String的創(chuàng)建機(jī)理

由于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

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)估大小,可提升性能。

四. String類的考點(diǎn)分析

  • 通過(guò) String 和相關(guān)類,考察基本的線程安全設(shè)計(jì)與實(shí)現(xiàn),各種基礎(chǔ)編程實(shí)踐。
  • 考察 JVM 對(duì)象緩存機(jī)制的理解以及如何良好地使用。
  • 考察 JVM 優(yōu)化 Java 代碼的一些技巧。
  • String 相關(guān)類的演進(jìn),比如 Java 9 中實(shí)現(xiàn)的巨大...

五. String技術(shù)點(diǎn)深入分析

5.1 String類是典型的Immutable類

是典型的 Immutable 類,被聲明成為 final class,所有屬性也都是 final 的。也由于它的不可變,類似拼接、裁剪字符串等動(dòng)作,都會(huì)產(chǎn)生新的 String 對(duì)象。

5.2 字符串設(shè)計(jì)和實(shí)現(xiàn)考量

  • String 是 Immutable 類的典型實(shí)現(xiàn),原生的保證了基礎(chǔ)線程安全,因?yàn)槟銦o(wú)法對(duì)它內(nèi)部數(shù)據(jù)進(jìn)行任何修改,這種便利甚至體現(xiàn)在拷貝構(gòu)造函數(shù)中,由于不可變,Immutable 對(duì)象在拷貝時(shí)不需要額外復(fù)制數(shù)據(jù)。
  • 為了實(shí)現(xiàn)修改字符序列的目的,StringBuffer 和 StringBuilder 底層都是利用可修改的(char,JDK 9 以后是 byte)數(shù)組,二者都繼承了 AbstractStringBuilder,里面包含了基本操作,區(qū)別僅在于最終的方法是否加了 synchronized。
  • 這個(gè)內(nèi)部數(shù)組應(yīng)該創(chuàng)建成多大的呢?如果太小,拼接的時(shí)候可能要重新創(chuàng)建足夠大的數(shù)組;如果太大,又會(huì)浪費(fèi)空間。目前的實(shí)現(xiàn)是,構(gòu)建時(shí)初始字符串長(zhǎng)度加 16(這意味著,如果沒(méi)有構(gòu)建對(duì)象時(shí)輸入最初的字符串,那么初始值就是 16)。我們?nèi)绻_定拼接會(huì)發(fā)生非常多次,而且大概是可預(yù)計(jì)的,那么就可以指定合適的大小,避免很多次擴(kuò)容的開(kāi)銷。擴(kuò)容會(huì)產(chǎn)生多重開(kāi)銷,因?yàn)橐獟仐壴袛?shù)組,創(chuàng)建新的(可以簡(jiǎn)單認(rèn)為是倍數(shù))數(shù)組,還要進(jìn)行arraycopy。

5.3 字符串緩存

  • String 在 Java 6 以后提供了 intern()方法,目的是提示 JVM 把相應(yīng)字符串緩存起來(lái),以備重復(fù)使用。在我們創(chuàng)建字符串對(duì)象并調(diào)用 intern() 方法的時(shí)候,如果已經(jīng)有緩存的字符串,就會(huì)返回緩存里的實(shí)例,否則將其緩存起來(lái)。
  • 在后續(xù)版本中,這個(gè)緩存被放置在堆中,這樣就極大避免了永久代占滿的問(wèn)題,甚至永久代在 JDK 8 中被 MetaSpace(元數(shù)據(jù)區(qū))替代了。而且,默認(rèn)緩存大小也在不斷地?cái)U(kuò)大中,從最初的 1009,到 7u40 以后被修改為 60013。

六. String不可變的好處

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)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
剑河县| 苍溪县| 丰顺县| 五莲县| 连平县| 台东市| 西乌珠穆沁旗| 舞阳县| 五常市| 都安| 平顶山市| 丹巴县| 望城县| 饶阳县| 都安| 西乌珠穆沁旗| 那曲县| 屯门区| 沾化县| 巴里| 岱山县| 左权县| 营口市| 屏山县| 中山市| 龙川县| 二连浩特市| 耒阳市| 阜康市| 大名县| 台江县| 离岛区| 湟源县| 宜兴市| 西宁市| 枣强县| 怀仁县| 肇东市| 西平县| 博兴县| 安泽县|