1. 程式人生 > >String,StringBuffer,StringBuilder的異同總結

String,StringBuffer,StringBuilder的異同總結

1.三者都是final類,都不允許被繼承。

2.String長度是不可變的,而另外兩個長度是可變的,且後面兩個可以儲存不同型別資料,是一個容器。

3.StringBuffer是執行緒安全的,StringBuilder是執行緒不安全的,但它們中的方法都是相同的,只不過StringBuffer在StringBuilde r的方法之上添加了synchronized修飾。

4.StringBuffer是JDK1.0就有的,而StringBuilder是JDK1.5出現的,其比StringBuffer擁有更好的效能,因為它不執行同步,所以速度更快。

5.如果一個String型別的字串,在編譯時就可確定是一個字串常量,則編譯完成之後,字串會自動拼接成一個常量。此時,String的速度比StringBuffer和StringBuilder的效能好的多。

6.String 類在用+號連線字串時會建立新的字串。看下面程式碼:

	public static void main(String[] args) {
		String s = "abc";
		System.out.println(s == (s + "123"));
	}//列印結果為false

7.在Java中,通過使用+號來串聯字串時,實際上底層會轉成通過StringBuilder例項的append()方法來實現。

在這裡記錄一個程式碼級別上的效能優化Tip:

字串連線是程式設計中非常普遍的操作,同時也是低效率的操作。前面說過,使用+來追加字串的問題在於,每次操作都會分配新的字串。

	public static String stringAppendLoop(){
		String s = "";
		for (int i = 0;i < 10000; i++) {
			if (s.length()>0) 
				s += ", ";
			s += "bar";
			
		}
		return s;
	} 
	public static String stringAppendBuilderLoop(){
		StringBuilder stringBuilder = new StringBuilder();
		for (int i = 0; i<10000; i++) {
			if (stringBuilder.length() > 0)
				stringBuilder.append(", ");
			stringBuilder.append("bar");
		}
		return stringBuilder.toString();
	}
在上面程式碼中,用StringBuilder的append效率更高,尤其對於頻繁進行字串操作的程式來說效率更加顯著。

相關推薦

對於StringStringBufferStringBuilder總結

實現 pac 安全 ack 其他 space 事情 nbsp 序列 StringBuffer 1,線程安全的可變字符序列。一個類似於 String 的字符串緩沖區,但不能修改 2,雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容

StringStringBufferStringBuilder異同總結

1.三者都是final類,都不允許被繼承。2.String長度是不可變的,而另外兩個長度是可變的,且後面兩個可以儲存不同型別資料,是一個容器。3.StringBuffer是執行緒安全的,StringBuilder是執行緒不安全的,但它們中的方法都是相同的,只不過StringB

深入瞭解StringStringBufferStringBuilder三個類的異同

Java提供了三個類,用於處理字串,分別是String、StringBuffer和StringBuilder。其中StringBuilder是jdk1.5才引入的。 這三個類有什麼區別呢?他們的使用場景分別是什麼呢? 本文的程式碼是在jdk12上執行的,jdk12和jdk5,jdk8有很大的區別,特別是Str

Java學習筆記(二)-------StringStringBufferStringBuilder區別以及映射到的同步異步相關知識

ringbuf 等待 java學習筆記 java學習 單線程 回復 改變 hashtable ble 1. String是不可變類,改變String變量中的值,相當於開辟了新的空間存放新的string變量 2. StringBuffer 可變的類,可以通過append方法改

StringStringBufferStringBuilder的區別

並不會 初始 jvm 小明 mce syn color turn 優點   數據結構:   數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。   比如數據庫就是對硬盤中的數據進行有規則的管理,可以進行增刪改查工作,而良好的數據結構可以優化這些操作,   也許

StringStringBufferStringBuilder三者的區別

方法 bsp 常量 可變 增加 推薦 效率 HR 單線程 相同點: String,StringBuffer,StringBuilder,都是final類,不允許被繼承,在本質上都是字符數組, 不同點: 1.String的長度是不可變的而後兩者長度可變,在進行連接操作時,St

查缺補漏——StringStringBufferStringBuilder區別及用法

最近在看併發及虛擬機器部分,介紹了String是不可變的物件,順便複習了與string相關的類。 一 String是不可變物件,它一定是執行緒安全的,因為當我們呼叫substring(),replace(),concat()這些方法時,都不會影響它原來的值,只會返回一個新構造的字串物件,因此當要

JAVA學習|StringStringBufferStringBuilder的區別與聯絡

String,StringBuffer,StringBuilder的區別與聯絡 String,StringBuffer,StringBuilder的區別這個問題幾乎是面試必問的題 ,最近學習的時候恰好遇到,就順便總結一下。 本文參考了以下文章: String StringBuild

StringStringBufferStringBuilder聯絡區別

三者的不同點: 看原始碼可以發現String類使用字元陣列來儲存字串,陣列是final修飾的,也沒有insert() append()delete()這些方法,String物件是一個常量 /** The value is used for character stora

【Java基礎】StringStringBufferStringBuilder之間的區別

對於這三個類,先總體來理解一下: 對String,你建立了一個String,你能通過set方法改變它的長度length嗎?顯然是不行的! 但 StringBuffer 可以! String 字串常量 StringBuffer 字串變數(執行緒安全) StringBu

StringStringBufferStringBuilder

一 相同點 都可以進行儲存字串,一般情況下效率StringBuilder>StringBuffer>String 二 不同點 String : String字串常量,是不可變的。因此每次定義或者改變String的值,其實是改變的該物件的引用,如果需要

解析StringStringBufferStringBuilder

1.String String是一個被final定義的類,所以一旦建立了String物件,其值不可被改變。 當我們更改字串的值時,虛擬機器會新建一個String物件,並賦予其值, 所以我們每一次更改String的值時候,記憶體中在做銷燬物件,新建物件的操作,其效率非常低

聊聊StringStringBufferStringBuilder

一個蘿蔔一個坑 (面試遇到的坑) 1.String 能不能被繼承呢? 從沒見過String被繼承過,那String就是不能被繼承了,為什麼不能被繼承呢,因為String是由final關鍵字修飾的,final 關鍵字宣告類可以把類定義為不能繼承的,即最終類;或者用於修飾方法,該方法不能被子

Java開發者如何正確的使用StringStringBufferStringBuilder

通過前面的文章,我們知道String類最大的特點是不可變性,這意味著對String類的任何修改都會新生成一個字串,比如你執行了String類的substring,replace,toUpperCase,toLowerCase,trim方法都會生成一個新的字串,一旦你的程式對字

StringStringBufferStringBuilder個人認為較重要的區別

 今天在整理不可變物件知識點時,突然看到了String,StringBuffer,StringBuilder三者的區別,這裡就挑一些我認為比較重要的點記錄一下,方便日後檢視。     String,StringBuffer,StringBuilder,都是final類,

Java中StringStringBufferStringBuilder的區別及相關常用函式

今天在刷演算法題的時候,題目上傳入的引數型別是StringBuffer,而需要返回的卻是String型別。其中我在寫的時候用了兩種不同的寫法產生的結果相同,但是速度卻不同。所以在網上查找了一些資料。下面做一個String,StringBuffer,StringBuilder的區別及常用函式介

面試系列-StringStringBufferStringBuilder三者區別

String,StringBuffer以及StringBuilder三者的區別主要是在兩個方面,即執行速度和執行緒安全這兩方面。 執行速度 從快到慢順序:StringBuilder > StringBuffer > StringString最慢的原因;String為字串常量,而StringBu

Java String為什麼是不可變類StringBufferStringBuilder區別

熟悉Java的都知道String類是不可變,但String類為什麼設計成不可變類,如何做到不可變沒有仔細想過。 String為什麼設計成不可變類? 1.符合Java字串池的設計方式。    Strin

Java中StringStringBufferStringBuilder區別與使用

一、簡介 在 Java 語言中,共有 8 個基本的資料型別,分別為:byte、short、int、long、float、double、boolean 和 char,其中 char 型別用於表示單個字元,例如 a、b、c 、A、B、C、& 這些大小寫

StringStringBufferStringBuilder類之間的區別和使用禁忌

轉自:https://blog.csdn.net/u010454030/article/details/80486136我們知道String類最大的特點是不可變性,這意味著對String類的任何修改都會新生成一個字串,比如你執行了String類的substring,repla