1. 程式人生 > 其它 >Java重溫學習筆記,String、StringBuffer 和 StringBuilder的區別

Java重溫學習筆記,String、StringBuffer 和 StringBuilder的區別

String:字串常量,字串長度不可變。Java中String 是immutable(不可變)的。用於存放字元的陣列被宣告為final的,因此只能賦值一次,不可再更改。如果要操作少量的資料用 String 。

StringBuffer:字串變數(Synchronized,即執行緒安全)。如果要頻繁對字串內容進行修改,出於效率考慮最好使用 StringBuffer,如果想轉成 String 型別,可以呼叫 StringBuffer 的 toString() 方法。即多執行緒操作大量資料,用StringBuffer。

StringBuilder:字串變數(非執行緒安全)。在內部 StringBuilder 物件被當作是一個包含字元序列的變長陣列。單執行緒操作大量資料考慮用StringBuilder。

關於String,看一段程式碼:

public class MyDemo {
   public static void main(String args[]){
        String s1 = "abc";            // 常量池
        String s2 = new String("abc");     // 堆記憶體中
        System.out.println(s1 == s2);        // false兩個物件的地址值不一樣。
        System.out.println(s1.equals(s2)); // true
        
        String s3 
= "a"+"b"+"c"; String s4 = "abc"; System.out.println(s3 == s4); // true System.out.println(s3.equals(s4)); // true String s5 = "ab"; String s6 = "abc"; String s7 = s5 + "c"; // 先建立StringBuilder(或 StringBuffer)物件,通過append 連線得到"abc",再呼叫 toString() 轉換得到的地址指向 s7
System.out.println(s6 == s7); // false System.out.println(s6.equals(s7)); // true } }

另外,String 類中concat()方法和+號的區別在於,concat是通過複製陣列再通過 char 陣列進行拼接生成一個新的物件,地址值會有變動,而 ”+“號則不會。也就是說,上面程式碼中的"a"+"b"+"c"如果替換成"a".concat("b").concat("c"),那麼s3不會等於s4。