更新時(shí)間:2022-09-21 10:29:48 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1174次
大家對(duì)字符串拼接方式已經(jīng)有所了解,在java中,String是一個(gè)用final修飾的不可變的類(lèi),所以String對(duì)象一旦被創(chuàng)建出來(lái)就不能修改了,如果修改String字符串就相當(dāng)于創(chuàng)建了一個(gè)新的String對(duì)象,再將新的對(duì)象的地址返回給他的引用。
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中,字符串是基于字符數(shù)組 value 實(shí)現(xiàn)的,而String中的 value是final修飾的,一旦賦值了就不可以改變。
使用運(yùn)算符”+“
String s1 = "abc";
String s2 = "def";
String s3 = "abc" + "def";
String s4 = "abc" + s2;
String s5 = s1 + s2;
第三行:如果是字符串常量的直接拼接,其實(shí)是在常量池中直接創(chuàng)建新的字符串,然后將其賦值給引用。
第四、五行:如果是含有字符串變量的拼接,在java中其實(shí)是通過(guò)StringBuilder創(chuàng)建了一個(gè)新的String對(duì)象。
(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);
}
從源碼可以看出,調(diào)用concat方法,其實(shí)就是通過(guò)調(diào)用Arrays.copyOf()方法,創(chuàng)建了一個(gè)大小為 s1.length + s2.length 的字符數(shù)組,再先后將s1 和 s2 拷貝進(jìn)新數(shù)組,最后通過(guò)這個(gè)字符數(shù)組創(chuàng)建一個(gè)新的String對(duì)象返回。感興趣的小伙伴也可以觀看本站的Java基礎(chǔ)教程,掌握更多的字符串拼接方式。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743