Java中String、StringBuffer、StringBuilder的區(qū)別介紹
java中String、StringBuffer、StringBuilder是編程中經(jīng)常使用的字符串類,他們之間的區(qū)別也是經(jīng)常在面試中會問到的問題?,F(xiàn)在總結(jié)一下,看看他們的不同與相同。
1.可變與不可變
String類中使用字符數(shù)組保存字符串,如下就是,因為有“final”修飾符,所以可以知道string對象是不可變的。
private final char value[];
StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串,如下就是,可知這兩種對象都是可變的。
char[] value;
2.是否多線程安全
String中的對象是不可變的,也就可以理解為常量,顯然線程安全。
AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
StringBuffer對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以是線程安全的??慈缦略创a:
public synchronized StringBuffer reverse() {
super.reverse();
return this;
}
public int indexOf(String str) {
return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法
}
StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。
3.StringBuilder與StringBuffer共同點
StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類)。
抽象類與接口的其中一個區(qū)別是:抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重復寫已經(jīng)存在的方法;而接口中只是對方法的申明和常量的定義。
StringBuilder、StringBuffer的方法都會調(diào)用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer會在方法上加synchronized關(guān)鍵字,進行同步。
最后,如果程序不是多線程的,那么使用StringBuilder效率高于StringBuffer。
- 全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系
- java 中String和StringBuffer與StringBuilder的區(qū)別及使用方法
- Java之String、StringBuffer、StringBuilder的區(qū)別分析
- Java那點事——StringBuffer與StringBuilder原理與區(qū)別
- java String、StringBuilder和StringBuffer的區(qū)別詳解
- Java中StringBuffer和StringBuilder區(qū)別
- Java中String、StringBuffer、StringBuilder的區(qū)別詳解
- Java String、StringBuffer與StringBuilder的區(qū)別
- java中String、StringBuffer與StringBuilder的區(qū)別
- Java中StringBuilder與StringBuffer的區(qū)別
相關(guān)文章
IDEA之啟動參數(shù),配置文件默認參數(shù)的操作
這篇文章主要介紹了IDEA之啟動參數(shù),配置文件默認參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
詳解Java字節(jié)碼編程之非常好用的javassist
這篇文章主要介紹了詳解Java字節(jié)碼編程之非常好用的javassist,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
使用springboot開發(fā)的第一個web入門程序的實現(xiàn)
這篇文章主要介紹了使用springboot開發(fā)的第一個web入門程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
詳解Java編程中protected修飾符與static修飾符的作用
這篇文章主要介紹了Java編程中protected關(guān)鍵字與static關(guān)鍵字的作用,是Java入門學習中的基礎知識,需要的朋友可以參考下2016-01-01
mybatis 有時update語句執(zhí)行無效的解決方案
這篇文章主要介紹了在項目里mybatis有時update語句執(zhí)行無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot @Value注解支持配置自動刷新能力擴展方式
本文介紹了如何通過自定義注解和BeanPostProcessor實現(xiàn)SpringBoot中@Value注解的配置自動刷新能力,主要步驟包括:定義一個支持動態(tài)刷新的注解,實現(xiàn)配置的動態(tài)變更,以及通過BeanPostProcessor掃描并刷新使用@Value注解的變量2024-12-12

