String StringBuffer StringBuilder的區別(前端面試必備)
String StringBuffer StringBuilder的區別(前端面試必備)
String
String建立物件原始碼
首先要明確String建立的字串是一個物件型別
- 斷子絕孫類,來看一下String類的構造方法,為final型別,沒有子類可以繼承它,可以看到這個類是用一個陣列型別去接收建立的字串的,我們知道,陣列內的資料無法改變,則String型別的資料是無法改變的,所以沒有個用String建立的物件都有各自獨立的空間也就是記憶體地址。
public final class String implements...{
private final char value[];
}
String建立字串的兩個方法和區別
該部分常講到常量池,請不懂常量池的小夥伴先移步到常量池的介紹
1.通過引號直接建立字串
String str="1280809174";
通過該方法建立一個字串,因為1280809174是一個常量,首先會從常量池中判斷是否已經存在1280809174這個物件,如果不存在,則會分配空間建立該物件,若常量池中存在該物件,即有一個常量等於1280809174,則不會分配空間,直接返回原有的該物件的記憶體地址。如下面例子,最後結果返回true
String str1="1280809174";
String str2="1280809174";
if(str1==str2){
return true;
}
2.通過new String()建立
String str=new String("1280809174");
這種方式它將會建立兩個1280809174物件,為什麼呢?
首先1280809174 是一個常量字串,因此會先在常量池中建立 1280809174字串物件,然後在堆中再建立一個字串物件,將 1280809174的字元陣列複製到堆中新建立的物件的字元陣列上,因此該方式不僅會在堆中,還會在常量池中建立1280809174 字串物件。 如下程式碼,將返回false
String str1=new String("123");
String str2=new String("123");
System.out.println(str1==str2);
StringBuffer
StringBuffer 是一個執行緒安全的可變的字元序列。它繼承於AbstractStringBuilder,實現了CharSequence介面。執行緒安全指能夠是執行緒同步的意思,就是當一個程式對一個執行緒安全的方法或者語句進行訪問的時候,其他的不能再對他進行操作了,必須等到這次訪問結束以後才能對這個執行緒安全的方法進行訪問。能夠運用於多執行緒。
StringBuilder
執行緒不安全,但相比較於StringBuffer效率更高。
總結
(1)如果要操作少量的資料用 String;
(2)多執行緒操作字串緩衝區下操作大量資料 StringBuffer;
(3)單執行緒操作字串緩衝區下操作大量資料 StringBuilder。
相關文章
- 面試必知:String、StringBuilder、StringBuffer的區別面試UI
- String,StringBuilder,StringBuffer的區別UI
- String、StringBuilder、StringBuffer的區別UI
- String、StringBuffer、StringBuilder的區別UI
- String、StringBuffer、StringBuilder區別?UI
- String,StringBuffer,StringBuilder區別UI
- String,StringBuffer與StringBuilder的區別UI
- String、StringBuffer、與StringBuilder的區別UI
- String,StringBuffer與StringBuilder的區別??UI
- String, StringBuilder, StringBuffer 之間的區別 - JavaUIJava
- String StringBuffer StringBuilder 三者的區別UI
- Android- String、StringBuffer、StringBuilder區別AndroidUI
- Java中String/StringBuffer/StringBuilder區別(轉)JavaUI
- String、StringBuffer與StringBuilder之間區別UI
- 面試常備,字串三劍客 String、StringBuffer、StringBuilder面試字串UI
- 從原始碼看String,StringBuffer,StringBuilder的區別原始碼UI
- StringBuilder StringBuffer String的區別(原始碼分析)-javaUI原始碼Java
- java中String、StringBuilder、StringBuffer三者的區別JavaUI
- Java中String,StringBuffer和StringBuilder的區別(轉載)JavaUI
- Java中的String,StringBuilder,StringBuffer三者的區別JavaUI
- 『Java 語法基礎』String、StringBuffer 與 StringBuilder 的區別JavaUI
- StringBuffer和StringBuilder的區別UI
- StringBuilder和StringBuffer的區別UI
- 你必須搞清楚的String,StringBuilder,StringBufferUI
- stringbuilder和stringbuffer區別UI
- String,StringBuffer, StringBuilder 的區別是什麼?String為什麼是不可變的?UI
- String、StringBuffer、StringBuilder的理解UI
- StringBuilder、StringBuffer和String三者的聯絡和區別(轉)UI
- StringBuilder和String 的區別?UI
- StringBuilder和String的區別UI
- String和StringBuilder的區別UI
- String、StringBuffer、StringBuilder剖析UI
- String、StringBuilder和StringBufferUI
- Java 之String、StringBuffer 和 StringBuilder 三者區別介紹JavaUI
- StringBuffer 和 StringBuilder 的 3 個區別UI
- String、StringBuffer和StringBuilder類的UI
- JAVA面試題 StringBuffer和StringBuilder的區別,從原始碼角度分析?Java面試題UI原始碼
- 【Java】String、StringBuilder和StringBufferJavaUI