Java中String、StringBuffer和StringBuilder的區(qū)別
String、StringBuffer和StringBuilder區(qū)別
在jdk源碼中
private final char value[];
- final用來(lái)修飾一個(gè)類;此類不能被其他類所繼承。如String類、System類、StringBuffer類
- final用來(lái)修飾方法;此方法不可以被重寫(xiě)。如Object類中的getClass();
- final用來(lái)修飾變量;此時(shí)的”變量“就稱位一個(gè)常量
- 修飾屬性可以考慮賦值的位置:顯式初始化、代碼塊中初始化、構(gòu)造器中初始化
- final修飾局部變量:尤其是使用final修飾形參時(shí),表明此形參是一個(gè)常量。當(dāng)我們調(diào)用此方法時(shí),給常量形參賦一個(gè)實(shí)參。一旦賦值以后,就只能在方法體內(nèi)使用此形參,但不能進(jìn)行重新賦值。
- static final 用來(lái)修飾屬性:全局常量

StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串char[]value但是沒(méi)有final關(guān)鍵字修飾,所以這兩個(gè)可變。
完整源碼可自行查閱
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
char[] value;
/**
* The count is the number of characters used.
*/
int count;
/**
* This no-arg constructor is necessary for serialization of subclasses.
*/
AbstractStringBuilder() {
}
/**
* Creates an AbstractStringBuilder of the specified capacity.
*/
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}StringBuffer和StringBuild區(qū)別
線程安全
String 中的對(duì)象是不可變的,也就可以理解為常量,線程安全。AbstractStringBuilder 是 StringBuilder 與 StringBuffer 的公共?類,定義了?些字符串的基本操作,如 expandCapacity、 append、insert、indexOf 等公共?法。StringBuffer 對(duì)?法加了同步鎖或者對(duì)調(diào)?的?法加了同步 鎖,所以是線程安全的。StringBuilder 并沒(méi)有對(duì)?法進(jìn)?加同步鎖,所以是?線程安全的。
性能
每次對(duì) String 類型進(jìn)?改變的時(shí)候,都會(huì)?成?個(gè)新的 String 對(duì)象,然后將指針指向新的 String 對(duì)象。StringBuffer 每次都會(huì)對(duì) StringBuffer 對(duì)象本身進(jìn)?操作,?不是?成新的對(duì)象并改變對(duì)象 引?。相同情況下使? StringBuilder 相?使? StringBuffer 僅能獲得 10%~15% 左右的性能提升, 但卻要冒多線程不安全的?險(xiǎn)。
使用建議
操作少量的數(shù)據(jù): 適? String單線程操作字符串緩沖區(qū)下操作?量數(shù)據(jù): 適? StringBuilder多線程操作字符串緩沖區(qū)下操作?量數(shù)據(jù): 適? StringBuffer
到此這篇關(guān)于Java中String、StringBuffer和StringBuilder的區(qū)別的文章就介紹到這了,更多相關(guān)String、StringBuffer和StringBuilder區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中的String、StringBuilder、StringBuffer三者的區(qū)別詳解
- Java中StringBuilder與StringBuffer的區(qū)別
- Java中StringBuilder與StringBuffer使用及源碼解讀
- 淺析Java中StringBuffer和StringBuilder的使用
- Java StringBuffer與StringBuilder有什么區(qū)別
- 詳解Java中String,StringBuffer和StringBuilder的使用
- Java中String和StringBuffer及StringBuilder?有什么區(qū)別
- Java源碼深度分析String與StringBuffer及StringBuilder詳解
- Java詳細(xì)分析String類與StringBuffer和StringBuilder的使用方法
- Java中String、StringBuffer和StringBuilder的區(qū)別與使用場(chǎng)景
相關(guān)文章
Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)動(dòng)態(tài)切換示例
本篇文章主要介紹了Spring配置多個(gè)數(shù)據(jù)源并實(shí)現(xiàn)動(dòng)態(tài)切換示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
eclipse配置tomcat10的詳細(xì)步驟總結(jié)
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著eclipse配置tomcat10的詳細(xì)步驟展開(kāi),文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下2021-06-06
IDEA導(dǎo)入Eclipse項(xiàng)目的方法步驟(圖文教程)
這篇文章主要介紹了IDEA導(dǎo)入Eclipse項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Java JTable 實(shí)現(xiàn)日歷的示例
這篇文章主要介紹了Java JTable 實(shí)現(xiàn)日歷的示例,幫助大家更好的理解和學(xué)習(xí)Java jtable的使用方法,感興趣的朋友可以了解下2020-10-10
Spring Boot如何通過(guò)java -jar啟動(dòng)
大家開(kāi)發(fā)的基于Spring Boot 的應(yīng)用 ,jar形式, 發(fā)布的時(shí)候,絕大部分都是使用java -jar 啟動(dòng)。本文主要介紹了Spring Boot如何通過(guò)java -jar啟動(dòng),一起來(lái)了解一下2021-05-05
Java設(shè)計(jì)模式之適配器模式簡(jiǎn)介
這篇文章主要介紹了Java設(shè)計(jì)模式之適配器模式,需要的朋友可以參考下2014-07-07
Spring Boot 通過(guò) Mvc 擴(kuò)展方便進(jìn)行貨幣單位轉(zhuǎn)換的代碼詳解
這篇文章主要介紹了Spring Boot 通過(guò) Mvc 擴(kuò)展方便進(jìn)行貨幣單位轉(zhuǎn)換,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12

