欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的StringBuilder類解析

 更新時(shí)間:2023年09月21日 09:06:12   作者:Neo丶  
這篇文章主要介紹了Java中的StringBuilder類解析,該類被設(shè)計(jì)用作StringBuffer的一個(gè)簡(jiǎn)易替換,用在字符串緩沖區(qū)被單線程使用的時(shí)候,如果可能,優(yōu)先采用該類,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中,String Builder比StringBuffer要快,需要的朋友可以參考下

基本介紹

1)一個(gè)可變的字符序列。此類提供一個(gè)與StringBuffer兼容的API,但不保證同步(StringBuilder不是線程安全)。該類被設(shè)計(jì)用作StringBuffer的一個(gè)簡(jiǎn)易替換,用在字符串緩沖區(qū)被單線程使用的時(shí)候。如果可能,優(yōu)先采用該類,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中,String Builder比StringBuffer要快;

2)在StringBuilder上的主要操作是append()和insert()方法,可重載這些方法,以接受任意類型的數(shù)據(jù)。

StringBuilder常用方法

與StringBuffer相同,參考StringBuffer類。

1)StringBuilder是final,無(wú)法被繼承;

2)繼承了AbstractStringBuilder類,屬性char[] value,內(nèi)容存放到value中

3)實(shí)現(xiàn)了Serializable接口,序列化(可以保存類型和數(shù)據(jù)本身)。

package com.pero.stringbuilder_;
/**
 * @author Pero
 * @version 1.0
 */
public class StringBuilder01 {
    public static void main(String[] args) {
        //1.StringBuilder 繼承 AbstractStringBuilder 類
        //2.實(shí)現(xiàn)了Serializable接口,說(shuō)明StringBuilder對(duì)象是可以串行化的(對(duì)象可以網(wǎng)絡(luò)傳輸,可以保存到文件)
        //3.StringBuilder 是final類,不能被繼承
        //4.StringBuilder 對(duì)象的字符序列存放在其父類 AbstractStringBuilder的char[] value;
        //  因此,字符序列是在堆中的
        //5.StringBuilder 的方法,沒(méi)有做互斥處理,即沒(méi)有synchronized關(guān)鍵字,因此在單線程的情況下使用StringBuilder
        StringBuilder stringBuilder = new StringBuilder();
    }
}

String、StringBuffer和StringBuilder的比較

1)StringBuilder和StringBuffer非常類似,均代表可變的字符序列,而且方法也一樣

2)String:不可變字符序列,效率低,但復(fù)用率高(常量池中的字符串可以被指向多個(gè)對(duì)象)

3)StringBuffer:可變字符序列,效率高(增刪)、線程安全(幾乎所有方法都加了synchronized關(guān)鍵字)

4)StringBuilder:可變字符序列,效率最高,但是線程不安全

5)String的使用注意事項(xiàng):

String s = "a";? //常見(jiàn)一個(gè)字符串
s += "b";? //實(shí)際上原來(lái)的"a"字符串已經(jīng)被丟棄,產(chǎn)生了一個(gè)新的字符串 s + "b"(也就是"ab")

如果多次執(zhí)行這些改變字符串內(nèi)容的操作,會(huì)導(dǎo)致大量的副本字符串對(duì)象存留在內(nèi)存中,降低效率。

如果這樣的操作放到循環(huán)中,會(huì)極大影響程序的性能=>結(jié)論:如果需要對(duì)String做大量修改,不要使用Sting類,建議使用StringBuffer和StringBuilder(單線程情況下)類。

package com.pero.stringbuilder_;
/**
 * @author Pero
 * @version 1.0
 */
public class StringBuilder02 {
    public static void main(String[] args) {
        String text = "";
        long startTime = 0L;
        long endTime = 0L;
        StringBuffer stringBuffer = new StringBuffer("");
        StringBuilder stringBuilder = new StringBuilder("");
        //測(cè)試StringBuffer的運(yùn)行效率
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 20000; i++) {
            stringBuffer.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer的執(zhí)行時(shí)間:"+(endTime-startTime));
        //測(cè)試StringBuilder的運(yùn)行效率
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 20000; i++) {
            stringBuilder.append(String.valueOf(i));
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder的執(zhí)行時(shí)間:"+(endTime-startTime));
        //測(cè)試String的運(yùn)行效率
        startTime = System.currentTimeMillis();
        for (int i=0; i < 20000;i++){
            text = text + i;
        }
        endTime = System.currentTimeMillis();
        System.out.println("String的執(zhí)行時(shí)間:"+(endTime-startTime));
    }
}

使用原則:

1.如果字符串存在大量的修改操作,一般使用StringBuffer或者StringBuilder;

2.如果字符串存在大量的修改操作,并在單線程的情況,使用StringBuilder;

3.如果字符串存在大量的修改操作,并在多線程的情況,使用StringBuffer;

4.如果我們字符串很少修改,被多個(gè)對(duì)象引用,使用String,比如配置信息等。

StringBuilder的方法使用和StringBuffer一樣。

到此這篇關(guān)于Java中的StringBuilder類解析的文章就介紹到這了,更多相關(guān)Java的StringBuilder類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot打包JAR包瘦身lib和配置文件分離方式

    springboot打包JAR包瘦身lib和配置文件分離方式

    本文介紹了如何通過(guò)優(yōu)化POM.xml配置來(lái)減小JAR包大小,提高傳輸速度,主要步驟包括:指定打包環(huán)境和跳過(guò)編譯單元測(cè)試、JAR打包排除配置文件和lib、提供全量包便于開(kāi)發(fā)環(huán)境使用、將lib和配置文件單獨(dú)復(fù)制出來(lái)
    2024-11-11
  • Java同步框架AbstractQueuedSynchronizer詳解

    Java同步框架AbstractQueuedSynchronizer詳解

    本篇文章主要介紹了Java同步框架AbstractQueuedSynchronizer詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • spring mvc中注解@ModelAttribute的妙用分享

    spring mvc中注解@ModelAttribute的妙用分享

    這篇文章主要給大家介紹了關(guān)于spring mvc中注解@ModelAttribute妙用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Android具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-09-09
  • Java笛卡爾積算法原理與實(shí)現(xiàn)方法詳解

    Java笛卡爾積算法原理與實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Java笛卡爾積算法原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了笛卡爾積算法的原理及java定義與使用笛卡爾積算法的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • 一文教你如何使用Java靈活讀取Excel內(nèi)容

    一文教你如何使用Java靈活讀取Excel內(nèi)容

    這篇文章主要給大家介紹了關(guān)于如何使用Java靈活讀取Excel內(nèi)容的相關(guān)資料,讀取Excel數(shù)據(jù)是Java開(kāi)發(fā)中常見(jiàn)的任務(wù),文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • SWT(JFace)體驗(yàn)之模擬BorderLayout布局

    SWT(JFace)體驗(yàn)之模擬BorderLayout布局

    SWT(JFace)體驗(yàn)之模擬BorderLayout布局代碼。
    2009-06-06
  • Java中的內(nèi)存泄漏

    Java中的內(nèi)存泄漏

    這篇文章主要介紹了Java中的內(nèi)存泄漏的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-11-11
  • java開(kāi)發(fā)中為什么雙重效驗(yàn)鎖要加volatile

    java開(kāi)發(fā)中為什么雙重效驗(yàn)鎖要加volatile

    這篇文章主要為大家介紹了java開(kāi)發(fā)中為什么雙重效驗(yàn)鎖要加volatile原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Java代碼重用之功能與上下文重用

    Java代碼重用之功能與上下文重用

    代碼重用通常使得程序開(kāi)發(fā)更加快速,并使得 BUG 減少。一旦一段代碼被封裝和重用,那么只需要檢查很少的一段代碼即可確保程序的正確性。接下來(lái)通過(guò)本文給大家介紹Java代碼重用之功能與上下文重用的相關(guān)知識(shí),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • SpringBoot集成ECDH密鑰交換的方法

    SpringBoot集成ECDH密鑰交換的方法

    ECDH密鑰交換算法通過(guò)橢圓曲線和Diffie-Hellman方法生成共享密鑰,用于前端和后端之間的AES加密通信,前端使用elliptic.js生成密鑰對(duì),后端使用crypto-js.min.js進(jìn)行AES加密,本文給大家介紹SpringBoot集成ECDH密鑰交換的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-01-01

最新評(píng)論