java中字符串拼接


在java中String字符串的拼接形式:

  在java中,String是一個用final修飾的不可變的類,所以String對象一旦被創建出來就不能修改了,如果修改String字符串就相當於創建了一個新的String對象,再將新的對象的地址返回給他的引用。

  

package java.lang;
//import ...
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
}

  在java中,字符串是基於字符數組 value 實現的,而String中的 value是final修飾的,一旦賦值了就不可以改變。

方式一:

  使用運算符”+“

1 String s1 = "abc";
2 String s2 = "def";
3 String s3 = "abc" + "def";
4 String s4 = "abc" + s2;
5 String s5 = s1 + s2;

  第三行:如果是字符串常量的直接拼接,其實是在常量池中直接創建新的字符串,然后將其賦值給引用。

  第四、五行:如果是含有字符串變量的拼接,在java中其實是通過StringBuilder創建了一個新的String對象。

(new StringBuilder()).append("abc").append(var2).toString();
(new StringBuilder()).append(var1).append(var2).toString();

  

方式二:

  使用 concat()

String s1 = "abc";
String s2 = "def ";
String s3 = s1.concat(s2);

  concat的源碼

public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
    }
void getChars(char dst[], int dstBegin) {
        System.arraycopy(value, 0, dst, dstBegin, value.length);
    }

  從源碼可以看出,調用concat方法,其實就是通過調用Arrays.copyOf()方法,創建了一個大小為 s1.length + s2.length 的字符數組,再先后將s1 和 s2 拷貝進新數組,最后通過這個字符數組創建一個新的String對象 返回。


免責聲明!

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



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