内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Java中的String類是什么-創(chuàng)新互聯(lián)

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

大邑縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

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è)線程中安全地使用。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。

文章名稱:Java中的String類是什么-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://www.rwnh.cn/article28/dopdcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、Google

廣告

聲明:本網(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)

手機(jī)網(wǎng)站建設(shè)
灌阳县| 石泉县| 横山县| 轮台县| 东安县| 涟水县| 平南县| 青田县| 高雄县| 绿春县| 东安县| 长岛县| 丰宁| 麻阳| 江门市| 永州市| 东丰县| 白山市| 南川市| 墨竹工卡县| 农安县| 防城港市| 奉贤区| 明星| 句容市| 利辛县| 西林县| 玉山县| 法库县| 沐川县| 勐海县| 湟中县| 陵川县| 营口市| 乐亭县| 新民市| 昭平县| 丘北县| 弋阳县| 开封县| 安岳县|