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

String、StringBuffer、StringBuilder 的區(qū)別?

這篇具有很好參考價(jià)值的文章主要介紹了String、StringBuffer、StringBuilder 的區(qū)別?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一. 介紹 String、StringBuffer、StringBuilder:??

   前言:?String、StringBuffer、StringBuilder 均在java.lang包下;

    String:?在Java中,String是一個(gè)特殊的引用類型,用于表示文本字符串。它提供了許多方法來(lái)操作和處理字符串,比如連接、截取、查找、替換等。String類內(nèi)部使用字符數(shù)組(char[])來(lái)存儲(chǔ)字符串的內(nèi)容,且value字段被final修飾,這意味著String對(duì)象一旦創(chuàng)建后,其值就不可改變。String對(duì)象的值存儲(chǔ)在常量池中,每次修改操作都會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象,并且如果常量池中已經(jīng)存在相同內(nèi)容的字符串,就會(huì)直接引用該字符串而不創(chuàng)建新對(duì)象。

    StringBuffer:Java中的一個(gè)可變字符串類,用于處理字符串。它可以被修改,因此適合在需要頻繁更改字符串內(nèi)容的情況下使用。StringBuffer提供了許多方法用于插入、刪除和修改字符串,并且支持線程安全操作。與String類不同,StringBuffer對(duì)象可以在已有的字符串基礎(chǔ)上進(jìn)行操作,且地址值不會(huì)改變;StringBuffer 類是可變的,它不會(huì)在常量池中創(chuàng)建新的常量。當(dāng)你使用 StringBuffer 修改一個(gè)字符串時(shí),它會(huì)在堆內(nèi)存中創(chuàng)建一個(gè)新的字符串對(duì)象,并且在需要的時(shí)候調(diào)整其容量。

    StringBuilder:與StringBuffer類似,它允許在已有字符串的基礎(chǔ)上進(jìn)行修改、添加和刪除操作,而不需要?jiǎng)?chuàng)建新的字符串對(duì)象。通過(guò)使用StringBuilder,可以高效地進(jìn)行字符串拼接、插入、替換等操作,特別適用于頻繁修改字符串內(nèi)容的場(chǎng)景,每次修改只是對(duì)自身做出修改。StringBuilder具有較高的性能和效率,并且是線程不安全的,適用于單線程環(huán)境下的字符串處理。

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-538086.html

二. 區(qū)別:

  1. 不可變性:

  • String類是不可變的,一旦創(chuàng)建就不能被修改。任何對(duì)字符串的操作都會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象。
  • StringBuffer和StringBuilder類是可變的,可以在原始字符串上進(jìn)行修改,無(wú)需創(chuàng)建新的對(duì)象。

  2. 線程安全性:

  • String類是線程安全的,因?yàn)樗姆椒ㄔ趦?nèi)部使用了同步機(jī)制,適用于多線程環(huán)境。
  • StringBuffer類是線程安全的,所有的方法都使用了同步鎖,可以在多線程環(huán)境中使用。
  • StringBuilder類是非線程安全的,它的方法沒(méi)有使用同步鎖,適用于單線程環(huán)境。

  3. 性能:

  • 由于String類的不可變性,每次進(jìn)行拼接、替換等操作時(shí)都會(huì)創(chuàng)建新的對(duì)象,對(duì)性能有一定影響。
  • StringBuffer類是可變的,適用于頻繁操作字符串的情況,但是由于使用了線程安全同步機(jī)制,相對(duì)較慢。
  • StringBuilder類是可變的,適用于單線程下頻繁操作字符串的情況,在性能上優(yōu)于StringBuffer。

  綜上所述,如果你需要進(jìn)行頻繁的字符串拼接、替換等操作,并且在多線程環(huán)境下使用,應(yīng)該選擇StringBuffer類。如果在單線程環(huán)境下進(jìn)行字符串操作,可以選擇StringBuilder類以獲得更好的性能。而如果你不需要修改字符串,只是進(jìn)行簡(jiǎn)單的字符串操作,那么使用String類即可。

?

三. 代碼展示

 不可變性區(qū)別展示:

    public static void main(String[] args) {
        // String
        String str = "Hello";
        System.out.println(str.hashCode());
        String str1 = str + "word";
        System.out.println(str1.hashCode());

        // StringBuilder
        StringBuilder sb = new StringBuilder("Hello");
        System.out.println(sb.hashCode());
        StringBuilder sb1 = sb.append("word");
        System.out.println(sb1.hashCode());

        // StringBuffer
        StringBuffer sbf = new StringBuffer("Hello");
        System.out.println(sbf.hashCode());
        StringBuffer sbf1 = sbf.append("word");
        System.out.println(sbf1.hashCode());
    }
輸出結(jié)果:
    69609650
    -1093253444
    23934342
    23934342
    22307196
    22307196

  可以看到String在改變字符串后,HashCode發(fā)生改變,而StringBuffer、StringBuilder 沒(méi)有變化。

?

四. 總結(jié)

  • String:不可變的字符串,線程安全,適合在多線程環(huán)境下使用,適用于字符串內(nèi)容不經(jīng)常改變的情況,操作少量的數(shù)據(jù)。
  • StringBuffer:可變的字符串,線程安全,適合在多線程環(huán)境下使用,適用于頻繁進(jìn)行字符串操作的情況。
  • StringBuilder:可變的字符串,非線程安全,適合在單線程環(huán)境下使用,適用于頻繁進(jìn)行字符串操作的情況。

?

五. 擴(kuò)展

  1. String 源碼中注釋

 * Strings are constant; their values cannot be changed after they
 * are created. String buffers support mutable strings.
 * Because String objects are immutable they can be shared. 

? ??*字符串是常量;它們的值在創(chuàng)建后不能更改,因?yàn)镾tring對(duì)象是不可變的,所以它們可以共享。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0
}

  ?private final char value[];??底層是字符數(shù)組實(shí)現(xiàn),該值是使用final修飾,創(chuàng)建后不能改變。?

?

  2. StringBuffer 源碼中注釋

 * A thread-safe, mutable sequence of characters.
 * A string buffer is like a {@link String}, but can be modified.

 * The principal operations on a {@code StringBuffer} are the
 * {@code append} and {@code insert} methods, which are
 * overloaded so as to accept data of any type.

 * Whenever an operation occurs involving a source sequence (such as
 * appending or inserting from a source sequence), this class synchronizes
 * only on the string buffer performing the operation, not on the source.

  * 線程安全的可變字符序列,字符串緩沖區(qū)類似于String,但是可以修改。

  * 主要操作是通過(guò)append()、insert() 它們是重載的,以便接受任何類型的數(shù)據(jù)。

  *?每當(dāng)涉及到源數(shù)據(jù)的操作發(fā)生改變時(shí),(例如從源序列追加或插入)此類進(jìn)行同步僅在執(zhí)行操作的字符串緩沖區(qū)上,而不是在源數(shù)據(jù)上。

    @Override
    public synchronized StringBuffer append(Object obj) {
        toStringCache = null;
        super.append(String.valueOf(obj));
        return this;
    }

    @Override
    public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }

   StringBuffer 在插入或修改的時(shí)候 都會(huì)使用synchronized() 確保線程安全性。

?

  3.?StringBuilder 源碼注釋

 * A mutable sequence of characters.  This class provides an API compatible
 * with {@code StringBuffer}, but with no guarantee of synchronization.
 * This class is designed for use as a drop-in replacement for
 * {@code StringBuffer} in places where the string buffer was being
 * used by a single thread (as is generally the case).   Where possible,
 * it is recommended that this class be used in preference to
 * {@code StringBuffer} as it will be faster under most implementations.

 * Instances of {@code StringBuilder} are not safe for
 * use by multiple threads. If such synchronization is required then it is
 * recommended that {@link java.lang.StringBuffer} be used.

  * 可變的字符串,此類提供與StringBuffer兼容的API,但不保證同步。這個(gè)類通常情況下用在字符串緩沖區(qū)被單個(gè)線程使用的地方,作為StringBuffer的替代品。建議優(yōu)先使用此類而不是StringBuffer,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中它會(huì)更快。

   * StringBuilder的實(shí)例對(duì)于多個(gè)線程使用是不安全的。如果需要同步,則建議使用StringBuffer

    @Override
    public StringBuilder append(Object obj) {
        return append(String.valueOf(obj));
    }

    @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }

  如果需要線程安全同步,建議使用StringBuffer類。

?

(?′?‵?) 完!?

?

到了這里,關(guān)于String、StringBuffer、StringBuilder 的區(qū)別?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 面試官:請(qǐng)聊一聊String、StringBuilder、StringBuffer三者的區(qū)別

    面試官 :“小伙子,在日常的寫代碼過(guò)程中,使用過(guò)String,StringBuilder和StringBuffer沒(méi)?” 我: “用過(guò)的呀!” 面試官: “那你就來(lái)聊一聊,他們之間有什么區(qū)別,不同場(chǎng)景下如何選擇吧” 我: “好嘞!” 在Java的開發(fā)過(guò)程中,使用頻率最高的就是String字符串,但由于在字符

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

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

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

    2024年02月11日
    瀏覽(21)
  • 7.1 String StringBuffer 和 StringBuilder 的區(qū)別是什么? String 為什么是不可變的?

    可變性 簡(jiǎn)單的來(lái)說(shuō): String 類中使用 final 修飾字符數(shù)組來(lái)保存字符串, private final char value[] ,所以 String 對(duì)象是不可變的。 補(bǔ)充(來(lái)自issue 675):在 Java 9 之后,String 、 StringBuilder 與 StringBuffer 的實(shí)現(xiàn)改用 byte 數(shù)組存儲(chǔ)字符串 private final byte[] value 而 StringBuilder 與 Str

    2024年02月15日
    瀏覽(28)
  • StringBuilder > StringBuffer > String

    StringBuilder , StringBuffer 和 String 都是 Java 中用于操作字符串的類,但它們?cè)谛阅?、線程安全性和用途上有一些區(qū)別。 1. String: String 類是 Java 中的不可變字符串類。一旦創(chuàng)建了字符串對(duì)象,它的值就不能被修改。每次對(duì)字符串進(jìn)行操作(連接、替換等),都會(huì)創(chuàng)建一個(gè)新的字符

    2024年02月11日
    瀏覽(29)
  • String、StringBuffer和StringBuilder的詳解

    String、StringBuffer和StringBuilder的詳解

    目錄 一、String講解 1.String(String字符串常量) 2.String 拼接方式與性能的影響 二、StringBuffer 和 StringBuilder 講解 1.StringBuffer 和 StringBuilder 使用場(chǎng)景:(StringBuffer、StringBuilder字符串變量) 2.StringBuffer的使用 3.StringBuffer與StringBuilder的線程安全性問(wèn)題? 4.synchronized的含義:(線程同步機(jī)制

    2024年02月12日
    瀏覽(16)
  • Java中的String、StringBuffer和StringBuilder

    在 Java 中,字符串是最常用的數(shù)據(jù)類型之一。 Java 中有三種處理字符串的方式:String、StringBuffer 和 StringBuilder。它們都被設(shè)計(jì)為處理字符串操作,但是它們之間有所不同。本篇博客將會(huì)介紹 String、StringBuffer 和 StringBuilder 的區(qū)別以及如何在 Java 中使用這些類型。 在 Java 中,

    2024年02月02日
    瀏覽(26)
  • Java字符串知多少:String、StringBuffer、StringBuilder

    Java字符串知多少:String、StringBuffer、StringBuilder

    String 是 Java 中使用得最頻繁的一個(gè)類了,不管是作為開發(fā)者的業(yè)務(wù)使用,還是一些系統(tǒng)級(jí)別的字符使用, String 都發(fā)揮著重要的作用。 String 是 不可變 的、 final 的,不能被繼承,且 Java 在運(yùn)行時(shí)也保存了一個(gè)字符串池(String pool) ,就使得 String 變得很特殊。 實(shí)現(xiàn)三個(gè)接口:

    2024年02月06日
    瀏覽(32)
  • 【java】關(guān)于String、StringBuffer和StringBuilder的那些事

    【java】關(guān)于String、StringBuffer和StringBuilder的那些事

    ? 目錄 一、String 1、構(gòu)造方法 2、字符串的不可變性 3、字符串的比較 4、 String的常用方法: 二、StringBuider和StringBuffer 1、字符串的拼接 2、StringBuider與StringBuffer 總結(jié) ? ? String類提供的構(gòu)造方式非常多,常用的就以下兩種: ? 注意: 1、String 是引用類型,內(nèi)部并不存儲(chǔ)字符串

    2024年04月10日
    瀏覽(25)
  • 【JAVA】String ,StringBuffer 和 StringBuilder 三者有何聯(lián)系?

    【JAVA】String ,StringBuffer 和 StringBuilder 三者有何聯(lián)系?

    個(gè)人主頁(yè):【??個(gè)人主頁(yè)】 系列專欄:【??初識(shí)JAVA】 在之前的文章中我們介紹了JAVA中String的運(yùn)用方法,事實(shí)上在JAVA字符串操作中僅僅只知道String方法是遠(yuǎn)遠(yuǎn)不夠的,今天我們要介紹的 StringBuffer 和 StringBuilder 在字符串操作中同樣占據(jù)總要地位。 和 String 類不同的是,S

    2024年02月14日
    瀏覽(24)
  • 【后端面經(jīng)-Java】String與StringBuffer與StringBuilder的比較

    目錄 1. String 2. StringBuffer 3. StringBuilder 4. 性能提升 5. 總結(jié)和比較 面試模擬 參考資料 不可變 查看 String 源碼如下:由源碼可知,String中存儲(chǔ)數(shù)據(jù)的數(shù)組被 final 修飾,因此是不可變的 運(yùn)算和操作 創(chuàng)建對(duì)象 創(chuàng)建對(duì)象有兩種方式:兩種方式都會(huì)在棧中創(chuàng)建一個(gè)字符串變量

    2024年02月16日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包