Java中String、StringBuffer和StringBuilder的區(qū)別
String、StringBuffer和StringBuilder區(qū)別
在jdk源碼中
private final char value[];
- final用來修飾一個類;此類不能被其他類所繼承。如String類、System類、StringBuffer類
- final用來修飾方法;此方法不可以被重寫。如Object類中的getClass();
- final用來修飾變量;此時的”變量“就稱位一個常量
- 修飾屬性可以考慮賦值的位置:顯式初始化、代碼塊中初始化、構造器中初始化
- final修飾局部變量:尤其是使用final修飾形參時,表明此形參是一個常量。當我們調用此方法時,給常量形參賦一個實參。一旦賦值以后,就只能在方法體內使用此形參,但不能進行重新賦值。
- static final 用來修飾屬性:全局常量
StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串char[]value但是沒有final關鍵字修飾,所以這兩個可變。
完整源碼可自行查閱
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 中的對象是不可變的,也就可以理解為常量,線程安全。AbstractStringBuilder 是 StringBuilder 與 StringBuffer 的公共?類,定義了?些字符串的基本操作,如 expandCapacity、 append、insert、indexOf 等公共?法。StringBuffer 對?法加了同步鎖或者對調?的?法加了同步 鎖,所以是線程安全的。StringBuilder 并沒有對?法進?加同步鎖,所以是?線程安全的。
性能
每次對 String 類型進?改變的時候,都會?成?個新的 String 對象,然后將指針指向新的 String 對象。StringBuffer 每次都會對 StringBuffer 對象本身進?操作,?不是?成新的對象并改變對象 引?。相同情況下使? StringBuilder 相?使? StringBuffer 僅能獲得 10%~15% 左右的性能提升, 但卻要冒多線程不安全的?險。
使用建議
操作少量的數(shù)據(jù): 適? String單線程操作字符串緩沖區(qū)下操作?量數(shù)據(jù): 適? StringBuilder多線程操作字符串緩沖區(qū)下操作?量數(shù)據(jù): 適? StringBuffer
到此這篇關于Java中String、StringBuffer和StringBuilder的區(qū)別的文章就介紹到這了,更多相關String、StringBuffer和StringBuilder區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 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詳細分析String類與StringBuffer和StringBuilder的使用方法
- Java中String、StringBuffer和StringBuilder的區(qū)別與使用場景
相關文章
Spring配置多個數(shù)據(jù)源并實現(xiàn)動態(tài)切換示例
本篇文章主要介紹了Spring配置多個數(shù)據(jù)源并實現(xiàn)動態(tài)切換示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04Spring Boot 通過 Mvc 擴展方便進行貨幣單位轉換的代碼詳解
這篇文章主要介紹了Spring Boot 通過 Mvc 擴展方便進行貨幣單位轉換,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12