java中String和StringBuffer的區別


前言

String和StringBuffer本質上都是修飾字符串的只是含義不同 StringBuffer叫做字符串緩沖區

首先看下string類的例子

public class Work1 {
public static void main(String[] args) {
String s = "hello";
String s1 = s.substring(3);
System.out.println(s==s1);//結果為false
}
}

 在來看下StringBuffer類的例子

public class Work1 {
     
    public static void main(String[] args) {
    
       StringBuffer ab1 = new StringBuffer();
		StringBuffer ab2 = ab1.append("hello");
		System.out.println(ab1==ab2);    //結果為true 

    }      
       
}

 在來看下二者的內存分布圖如下:

根據內存分布圖來看 String 除了直接String s="hello" 這種方式之外不會創建新的對象  其它的不管是通過方法返回的String類型還是直接利用構造函數創建出來的字符串還是通過變量拼接(二邊只要有一個變量拼接)都需要創建新的對象

而StringBuffer通過StringBuffer里面的方法  操作 返回一個StringBuffer類型的變量跟原StringBuffer變量是相等的 。

String stt1 = new String("hello");
		String stt2 = new String("world");
		System.out.println(stt1+stt2);

String stt1 = "hello"
		String stt2 = new String("world");
		System.out.println(stt1+"world");

//上面二種拼接都是可以的



//這種是可以拼接的
StringBuffer ab1 = new StringBuffer();
		StringBuffer ab2 = ab1.append("hello");
		System.out.println(ab2+"hello");




//這種是不可以拼接的
StringBuffer ab1 = new StringBuffer("abc");
		StringBuffer ab2 = ab1.append("hello");
		System.out.println(ab2+ab1);

 

最后總結三點不同:

        1、String可以用+算術運算符拼接字符串(不管是二邊有一個變量字符串還是都是常量字符串都可以拼接)StringBuffer不可以(除了二邊只要有一個常量字符串對象就可以拼接  例如 ab2+"hello")
        2、String表示線程不安全 執行效率高 StringBuffer相反
        3、String對象中的值是不可變的    StringBuffer中的值是可變的(也就是可以通過方法修改原來的StringBuffer變量並賦值給一個新的StringBuffer變量 二者之間是相等的)

   4、String創建對象時可以String a = "abc" 但是 StringBuffer不能直接這樣創建 需要StringBuffer pj1 = new StringBuffer("abc");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM