国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java掃盲篇】String、String Buffer和String Builder的區(qū)別

這篇具有很好參考價值的文章主要介紹了【Java掃盲篇】String、String Buffer和String Builder的區(qū)別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

你在面試時,面試官讓你講講String String Buffer String Builder的區(qū)別,你是否能流暢的、完整的敘述出他們?nèi)叩膮^(qū)別?

?先說結(jié)論

  • 相同點(diǎn): 他們的底層都是由char數(shù)組實現(xiàn)的。
  • 不同點(diǎn):
  1. String對象一旦創(chuàng)建,是不能修改的,如果要修改,會重新開辟空間來存儲修改后的對象;而String Buffer和String Builder創(chuàng)建的對象是可以修改的。
  2. String Buffer是線程安全的,他幾乎所有方法都被synchronization 所修飾,允許采用多線程的方式執(zhí)行添加或刪除字符的操作,但是效率比較低;而String Builder是單線程的。如果所有字符串在一個單線程中編輯(通常都是這樣),則應(yīng)該使用String Builder。這兩個類的API大部分是相同的。
    總結(jié)
  • 當(dāng)在程序中需要頻繁的更改字符串的內(nèi)容時,不要使用String(會浪費(fèi)大量的空間)
  • 如果是要考慮線程下的安全問題時,使用StringBuffer
  • 否則使用String Builder

?String類

String的三種構(gòu)造方法

public static void main(String[] args) {

       // 使用常量串構(gòu)造
       String s1 = "hello bit";
       System.out.println(s1);
       
       // 直接newString對象
       String s2 = new String("hello bit");
       System.out.println(s1);
       
       // 使用字符數(shù)組進(jìn)行構(gòu)造
       char[] array = {'h','e','l','l','o','b','i','t'};
       String s3 = new String(array);
       System.out.println(s1);
}

我們要理解String類,首先要搞清楚String的底層
通過源碼可以看出
String是一個引用類型

【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器

我們舉幾個實際的例子
來更清楚的了解String的本質(zhì)

請你先判斷這個表達(dá)式的結(jié)果是什么
【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器

答案為true
我們畫圖來理解
【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器

再判斷一下這個表達(dá)式的值是什么
【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器

結(jié)果為false
【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器

?字符串的不可變性

【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器
【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器

  1. String類被final修飾,表明該類不能被繼承
  2. value被修飾被final修飾,表明value自身的值不能改變,即不能引用其它字符數(shù)組,但是其引用空間中的內(nèi)容可以修改。

?為什么String要設(shè)置成不可變類型

  1. 方便實現(xiàn)字符串對象池. 如果 String 可變, 那么對象池就需要考慮寫時拷貝的問題了.
  2. 不可變對象是線程安全的.
  3. 不可變對象更方便緩存 hash code, 作為 key 時可以更高效的保存到 HashMap 中

易錯點(diǎn)

【Java掃盲篇】String、String Buffer和String Builder的區(qū)別,Java學(xué)習(xí)成長記,java,開發(fā)語言,服務(wù)器

  • Java中有常量優(yōu)化機(jī)制,“Hello"和"World"本身就是字符串常量,所以在編譯時,會直接把"Hello"和"World"合并成"HelloWorld"字符串,又因為在執(zhí)行s3的時候已經(jīng)在常量池中創(chuàng)建了"HelloWorld".
  • 當(dāng)變量與字面量或變量與變量進(jìn)行拼接時,會在堆中創(chuàng)建一個StringBuilde對象,然后使用StringBuilder的append()方法將變量與字面量或變量與變量進(jìn)行拼接,最后調(diào)用toString()方法轉(zhuǎn)成String對象。所以s5、s6、s7指向的都是堆內(nèi)存中String對象的地址值。
public static void main(String[] args) {
    final String s1="Hello"; 
    String s2="HelloWorld";
    String s3=s1+"World";
    System.out.println(s2==s3); //true
}

被final修飾表示是一個常量,所以此時s1+“World"就相當(dāng)于"Hello”+“World”,結(jié)果仍然是一個常量。

有人說:字符串不可變是因為其內(nèi)部保存字符的數(shù)組被final修飾了,因此不能改變。
這種說法是錯誤的,不是因為String類自身,或者其內(nèi)部value被final修飾而不能被修改。
final修飾類表明該類不想被繼承,final修飾引用類型表明該引用變量不能引用其他對象,但是其引用對象中的內(nèi)容是可以修改的。

所有涉及到可能修改字符串內(nèi)容的操作都是創(chuàng)建一個新對象,改變的是新對象

以上就是本文所有內(nèi)容,如果對你有幫助的話,點(diǎn)贊收藏支持一下吧!??????文章來源地址http://www.zghlxwxcb.cn/news/detail-855481.html

到了這里,關(guān)于【Java掃盲篇】String、String Buffer和String Builder的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java中==和equals的區(qū)別,包裝類對比、String和new String

    Java中==和equals的區(qū)別,包裝類對比、String和new String

    ? ? ? ? 對于這個問題,我們得了解基本類型和引用類型在內(nèi)存中的結(jié)構(gòu),具體如下: 引用對象句柄訪問: 引用對象直接指針訪問: ? ????????可以看出,無論哪種方式訪問基本類型和引用類型的實例數(shù)據(jù),基本類型的內(nèi)存上是保存值,而引用類型的內(nèi)存上是保存指針

    2024年02月11日
    瀏覽(16)
  • Java-String、StringBuffer、StringBuilder區(qū)別及相關(guān)面試題

    Java-String、StringBuffer、StringBuilder區(qū)別及相關(guān)面試題

    在Java編程中,經(jīng)常會遇到處理字符串的需求。Java提供了多個類來處理字符串,其中最常用的是String、StringBuffer和StringBuilder類。本文將介紹這三個類的基本用法和區(qū)別。 String是Java中最常用的字符串類,它是不可變的,也就是說一旦被創(chuàng)建,它的值就不能被改變。下面是Stri

    2024年02月11日
    瀏覽(21)
  • Java基礎(chǔ)09 —— 字符序列--String、StringBuilder、StringBuffer區(qū)別及其方法介紹

    字符與字符串 字符類型(char)是Java中的基本數(shù)據(jù)類型,占2個字節(jié)16位,默認(rèn)值是 ‘u0000’ 。字符是用單引號引住的單個符號. 字符串(String)是用雙引號引住的任意個字符,是引用數(shù)據(jù)類型,默認(rèn)值是null 。字符串其實就是字符組成的序列 字符串聲明 舉例: 字符序列 多個字符

    2024年02月09日
    瀏覽(21)
  • 【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    建造者模式又叫生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同屬性的對象 建造者模式是一步一步創(chuàng)建一個復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,不

    2024年02月15日
    瀏覽(26)
  • Java String基礎(chǔ)學(xué)習(xí)

    Java String基礎(chǔ)學(xué)習(xí)

    目錄 1、String的構(gòu)造方法 2、String內(nèi)存模型 3、字符串的比較 4、字符串的練習(xí) 1、用戶登錄系統(tǒng) 2、遍歷字符串 3、統(tǒng)計字符次數(shù) 4、拼接字符串 5、字符串的反轉(zhuǎn) 6、金額轉(zhuǎn)換 7、手機(jī)號屏蔽 * 8、身份證信息查看 9、敏感詞替換 5、StringBuilder 1、概念及練習(xí) 2、鏈?zhǔn)骄幊趟枷?3、小

    2024年01月21日
    瀏覽(16)
  • 【從零開始學(xué)習(xí)JAVA | 第八篇】String類

    【從零開始學(xué)習(xí)JAVA | 第八篇】String類

    目錄 前言: String類: 常見的認(rèn)識誤區(qū): 創(chuàng)建String類: ?注意點(diǎn): 總結(jié): ? ? ? ? String類是Java中最常見的一個類,本篇將對Stirng類的各種功能進(jìn)行詳細(xì)的介紹,各位小伙伴如果感興趣可以點(diǎn)擊進(jìn)來觀看。 Java中的String類是一個非常常用的類, 它表示一串字符序列 。Java的字

    2024年02月10日
    瀏覽(25)
  • Java類的Builder應(yīng)用以及使用@Data和@Builder高效應(yīng)用Builder

    記錄 :395 場景 :手動編寫Java類的Builder及其應(yīng)用。使用lombok的@Data和@Builder注解構(gòu)建Java類的Builder及其應(yīng)用。 Java Builder模式 :是Java設(shè)計模式之一,它屬于對象創(chuàng)建型模式,是將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 結(jié)論一 :使用

    2024年02月09日
    瀏覽(17)
  • 什么是Java中的Builder模式?

    Java中的Builder模式是一種結(jié)構(gòu)型設(shè)計模式,它允許你將一個復(fù)雜對象的構(gòu)建過程分解為多個步驟,使得客戶端可以按照一定的順序構(gòu)建對象,而無需在每個步驟中都進(jìn)行實例化。這種模式有助于隱藏對象的構(gòu)造過程,使得代碼更加清晰、易于理解和維護(hù)。 下面是一個簡單的示

    2024年02月13日
    瀏覽(18)
  • 對于Java的前端知識掃盲

    Node.js是一個基于Chrome V8引擎的JavaScript運(yùn)行環(huán)境,它讓JavaScript可以在服務(wù)器端運(yùn)行。Node.js提供了非阻塞I/O、事件驅(qū)動的編程模型,使得服務(wù)器端的JavaScript可以高效地處理大量并發(fā)請求。與此相比,JDK是Java Development Kit的縮寫,是Java開發(fā)環(huán)境的基礎(chǔ)包,包含了Java編譯器、JRE運(yùn)

    2023年04月11日
    瀏覽(18)
  • Java中return的用法(快速掃盲)

    Java中return的用法(快速掃盲)

    ?????? 點(diǎn)進(jìn)來你就是我的人了 博主主頁: ??????戳一戳,歡迎大佬指點(diǎn)! 歡迎志同道合的朋友一起加油喔 ?????? 目錄 前言 ?1.定義 2.return的用法 3.break和return的區(qū)別: 此篇幫助不理解return用法的小伙伴們快速掃盲! ?return語句可以使其從當(dāng)前方法中退出,返回到調(diào)用該

    2023年04月27日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包