1. 程式人生 > >java中的String,StringBuilder,和StringBuffer的聯絡與區別

java中的String,StringBuilder,和StringBuffer的聯絡與區別

首先我們看這麼一個程式

public static void main(String[]args){
	String str1 = "hello";
	String str2 = str1+"word";
	System.out.println(str2);
}

String

就是簡單的將str1與word相加賦給了str2,我們彙編瞭解一下


可以看到在內部String型別new出來的是StringBuilder型別的物件,然後採用StringBuilder.append方法將將word追加在str1後。

注意的是追加後使用StringBulider.toString方法


toString在內部也是new了一個String型別的物件,所以這也就是為什麼str1和str2的地址不同的原因。

StringBuilder

類似的我們實現這個程式碼

StringBuilder str = new StringBuilder("hello");
           str.append("word");
           System.out.println(str);

彙編瞭解


區別與String的是append追加word後並沒有建立新的物件。這就是StringBuild型別的天然優勢。

StringBuffder

public static void main(String[] args) {
		// TODO Auto-generated method stub
           StringBuffer str = new StringBuffer("hello");
           str.append("word");
           System.out.println(str);
	}

彙編處理


類似與StringBuilder,StringBuffer也是直接追加。

那麼兩者的區別在哪???

是這樣StringBuffer在定義的時候是被synchronized修飾,而synchronized代表的是類似同步鎖的東西,代表在這個執行緒中是安全的,所以一般我們在多執行緒中使用StringBuffer,而在單執行緒中這個安全檢測明顯是多餘的,所以單執行緒中StringBuilder常用一點。

而String型別在追加的時候會建立新的物件,所以如果要頻繁的追加,String型別我們不推薦

如有不對,請多多指教。

相關推薦

JavaString直接賦值使用new的區別

String str1 = "ABC"; String str2 = new String("ABC"); String str1 = “ABC”;可能建立一個或者不建立物件,如果”ABC”這個字串在java String池裡不存在,會在java Str

JavaStringStringBuilderStringBuffer常用源碼分析及比較(一):String源碼分析

array string類 都是 epo sys 匹配字符串 bound 地址 簡單 String: 一、成員變量: /** The value is used for character storage. */ private final char value[

JavaStringStringBuilderStringBuffer常用源碼分析及比較(二):StringBuilderStringBuffer源碼分析

string類型 character private 字符 代碼 less pri des over StringBuilder: 一、構造方法: /** * Constructs a string builder with no characters in i

JavaStringStringBuilderStringBuffer常用源碼分析及比較(三):StringStringBuilderStringBuffer比較

val str 成員變量 相同 += let .get end art 看這篇隨筆之前請務必先看前面兩章: Java中String、StringBuilder、StringBuffer常用源碼分析及比較(一):String源碼分析 Java中String、StringBui

Java學習筆記總結:JAVAStringStringBuilderStringBuffer類的區別

不斷地學習,不斷地填充自己的技術庫,學習Java已經有一段時間了,由一開始的不適應到後來的足以靈活應對,不僅僅取決於老師的精緻講課,還有就是依靠我的學習祕籍:記錄自己的學習筆記。今天給大家分享的技術學習筆記是JAVAString,StringBuilder以及StringBuffer這三個類之間的區

StringStringBuilderStringBuffer聯絡區別

三者的區別,主要來自於兩個方面: 一個是執行緒安全,另一個是執行速度。 String是字串常量,而StringBuider和StringBuffer是字串變數。 String是執行速度最慢的,切由於String是最終類,所以是執行緒安全的。 Stirng為什麼執行速度最慢哪?這要從jvm

JavaStringStringBuilder以及StringBuffer

1.String底層使用final修飾的類: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /*

JavaStringStringBuilderStringBuffer區別

ring 非線程安全 安全 字符串變量 buffer java 不可 ringbuf lock 常量還是變量: String是字符串常量(以final修飾符進行修飾,不可更改); StringBuilder是字符串變量 StringBuffer是字符串變量 線程安全:

JavaString方法的練習使用

package com.sdc.test; public class StringTest01 { public static void main(String[] args) { /*//使用String()方法初始化的建立一個物件 String str = new String(

JavaString型別傳參char陣列型別傳參的區別(疑問)

都說java只有一種引數傳遞值傳遞,傳基本型別是值的副本,傳引用型別是引用地址值的副本為什麼基於副本的兩種修改會有區別呢?面試題String str="hello"; char[] c = {'a','b','c'}; void change(String str,char[

javaString的相等判斷(==equals())詳解

以前只是一直用equals()來判斷字串變數是不是和某個定值相等,知道這樣比較穩妥,但是我想有必要說說清楚這其中的原理。 首先,引入java常量池的概念,也就是編譯的時候,常量們會被確定在.class檔案中,java常量池中一共有如下這麼多內容: 常量表型別 標誌值(

javaThread類run()方法start()方法的區別

run方法:不啟動新執行緒 public void run() { if (target != null) { target.run(); } } start()方法:啟動一個執行緒 public synchronized void start()

JavaIO流-18-flushclose方法的區別

    本篇來學習一個小的知識點,flush方法和close方法的區別。前面我們介紹了和使用了close方法,知道是用來關閉流的操作,但是並沒有介紹flush方法,字面意思的重新整理的意思。下面我們來先看看一個例子,然後引出flush方法。 1.如果不關閉流執行程式碼 p

javaString字串的替換函式:replacereplaceAll的區別

1>replace的引數是char和CharSequence,既可以支援字元替換,也可以支援字串替換。 2>replaceall引數是regex, replacement,regex表示是正則表示式。 replace : String src = new Strin

oracle的having group by ,where之間聯絡區別

having子句與where有相似之處但也有區別,都是設定條件的語句。 在查詢過程中聚合語句(sum,min,max,avg,count)要比having子句優先執行.而where子句在查詢過程中執行優先級別優先於聚合語句(sum,min,max,avg,count)。 簡

Java有關基本資料型別包裝類的區別使用標準

包裝類是物件,擁有方法和欄位.物件的呼叫都是通過引用物件的地址,產生物件時直接用引用指向這個物件(引用變數是在存在棧記憶體中,物件是在堆記憶體中的,堆中分配記憶體); 基本型別不是,直接儲存數值.另外一個區別是,包裝類是引用傳遞 而基本型別是值傳遞; 變數的值儲存在棧裡,

Java的泛型類泛型方法區別聯絡

泛型的概念大家應該都會,不懂的百度或者google,在java中泛型類的定義較為簡單<span style="font-size:18px;"><span style="font-s

資料歸一化標準化正則話的聯絡區別

資料處理的features engineering過程中,常常需要根據演算法的input資料格式對資料進行預處理,對數值性數的表處理可以提高演算法的精度,保證演算法的可信度。常用的資料處理辦法有資料歸一化,標準話和正則話。 1:資料歸一化(Normalization)  1.把資料變為

最大似然估計最大後驗估計貝葉斯估計聯絡區別

1.什麼是引數 在機器學習中,我們經常使用一個模型來描述生成觀察資料的過程。例如,我們可以使用一個隨機森林模型來分類客戶是否會取消訂閱服務(稱為流失建模),或者我們可以用線性模型根據公司的廣告支出來預測公司的收入(這是一個線性迴歸的例子)。每個模型都包含自己的

HadoopSpark聯絡區別

轉自:https://blog.csdn.net/vaychen/article/details/83578527      博主講解很形象,建議hadoop,spark學完後在看一遍 談到大資料,相信大家對Hadoop和Apache Spark這兩個名字並不陌生。