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

StringBuffer與StringBuilder底層擴容機制與常用方法

 更新時間:2023年07月05日 10:28:15   作者:指揮官乄  
這篇文章主要給大家介紹了StringBuffer、StringBuilder底層擴容機制與常用方法,有感興趣的小伙伴跟著小編一起來學習吧

StringBuffer 與 StringBuilder底層分析、擴容機制與常用方法

StringBuffer(線性安全)

  • 直接父類AbstractStringBuilder
  • 實現(xiàn)了Serializable,可以串行化
  • 在父類AbstractStringBuilder有屬性char[] value 不是final類型,該value數(shù)字存放字符串內(nèi)容,引出存放在堆中,所以在變化的時候不用每次都更改地址,創(chuàng)建新的對象,效率高
  • 是一個final類,不能被繼承

StringBuffer構(gòu)造方法

  • StringBuffer()初始容量為16
  • StringBuffer(int capacity) 初始容量為指定大小
  • StringBuffer(String str) 初始容量為指定字符串+16,注意是容量不是長度

StringBuffer擴容 (StringBuilder擴容機制一樣)

擴容方式:2n+2

源碼:

private int newCapacity(int minCapacity) {
        // overflow-conscious code
        int newCapacity = (value.length << 1) + 2;
        if (newCapacity - minCapacity < 0) {
            newCapacity = minCapacity;
        }
        return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
            ? hugeCapacity(minCapacity)
            : newCapacity;
    }

StringBuffer、StringBuilder的類繼承結(jié)構(gòu)圖,兩者的結(jié)構(gòu)圖是一樣的

StringBuffer常用方法

  • 增 append
  • 刪 delete(start,end)
  • 改 replace (start,end,string) ,string是要修改成的新內(nèi)容
  • 查 indexOf(string) , string是要 查找的內(nèi)容
  • 插入 insert
  • 獲取長度 length() 注意有括號

StringBuilder (不安全)

  • 線程不安全,單線程優(yōu)先使用,方法中沒有synchronized修飾
  • 主要操作時append和insert,可以重載這些方法,可以接受任何類型的數(shù)據(jù)
  • 擴容機制與StringBuffer一樣

String、StringBuffer、StringBuilder三者之間的區(qū)別

  • StringBuffer、StringBuilder 均代表可變字符串,方法一樣
  • String:不可變字符序列,效率低,但是復(fù)用率高
  • StringBuffer:可變字符串、增刪效率高,線性安全
  • StringBuilder:可變字符串、增刪效率高,線性不安全

使用場景

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

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

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

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

到此這篇關(guān)于StringBuffer與StringBuilder底層擴容機制與常用方法的文章就介紹到這了,更多相關(guān)StringBuffer與StringBuilder擴容與用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA使用Maven創(chuàng)建module出現(xiàn)Ignored?pom.xml問題及解決

    IDEA使用Maven創(chuàng)建module出現(xiàn)Ignored?pom.xml問題及解決

    這篇文章主要介紹了IDEA使用Maven創(chuàng)建module出現(xiàn)Ignored?pom.xml問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • jenkins按模塊進行構(gòu)建遇到的問題及解決方案

    jenkins按模塊進行構(gòu)建遇到的問題及解決方案

    這篇文章主要介紹了jenkins按模塊進行構(gòu)建的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 詳解Java中clone的寫法

    詳解Java中clone的寫法

    這篇文章主要介紹了Java中clone的寫法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • 利用java獲取某個文件夾下的所有文件

    利用java獲取某個文件夾下的所有文件

    這篇文章主要給大家介紹了關(guān)于如何利用java獲取某個文件夾下的所有文件的相關(guān)資料,在從事web開發(fā)工作中,經(jīng)常需要對本地某一個目錄下的文件進行處理,需要的朋友可以參考下
    2023-07-07
  • SpringMVC中處理Http請求的原理詳解

    SpringMVC中處理Http請求的原理詳解

    這篇文章主要介紹了SpringMVC中處理Http請求的原理詳解,當一個http請求過來了首先經(jīng)過的是DispatcherServlet這么一個前端控制器并調(diào)用了這個前端控制器的doService方法,這個方法最終我們發(fā)現(xiàn)它調(diào)用了doDispatcher這么一個方法,需要的朋友可以參考下
    2023-12-12
  • SpringBoot+Security 發(fā)送短信驗證碼的實現(xiàn)

    SpringBoot+Security 發(fā)送短信驗證碼的實現(xiàn)

    這篇文章主要介紹了SpringBoot+Security 發(fā)送短信驗證碼的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • java使用jdbc操作數(shù)據(jù)庫示例分享

    java使用jdbc操作數(shù)據(jù)庫示例分享

    這篇文章主要介紹了java使用jdbc操作數(shù)據(jù)庫示例,需要的朋友可以參考下
    2014-03-03
  • 基于Springboot商品進銷存管理系統(tǒng)的設(shè)計與實現(xiàn)

    基于Springboot商品進銷存管理系統(tǒng)的設(shè)計與實現(xiàn)

    本項目基于springboot實現(xiàn)一個進銷存管理系統(tǒng),主要用戶開設(shè)網(wǎng)店的相關(guān)商品的進貨、銷售、庫存的管理,功能比較完整,需要的可以參考一下
    2022-08-08
  • Tomcat報錯:HTTP Status 500 (Wrapper cannot find servlet class)解決辦法

    Tomcat報錯:HTTP Status 500 (Wrapper cannot find servlet class)

    這篇文章主要介紹了Tomcat報錯:HTTP Status 500 (Wrapper cannot find servlet class)解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Feign如何設(shè)置超時時間(不同情況)

    Feign如何設(shè)置超時時間(不同情況)

    本文主要介紹了Feign的超時時間設(shè)置,包括單獨使用Feign和在SpringCloud環(huán)境下的設(shè)置方式,以及與Ribbon和Hystrix的配合使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11

最新評論