String concat(String str) 學習
阿新 • • 發佈:2018-11-19
String concat(String str) 連線str到當前字串的末尾
String s1 = “Hello”;
s1.concat(“ World”);
sout(s1);====》Hello
s1 = s1.concat(“ World”);
sout(s1);=====>Hello World
好奇心的引導之下看了一下concat方法的實現,原始碼是這樣的:
public String concat(String str) { int otherLen = str.length();//取得str字串長度 if (otherLen == 0) {//如果傳入的字串內容為空,則返回原字串 return this; } int len = value.length;//取得原字串內容的長度 char buf[] = Arrays.copyOf(value, len + otherLen);//複製字串的內容到char陣列,並擴充套件長度 str.getChars(buf, len);//將str的內容複製到buf陣列中,位置從len開始。在這一步完成兩個字串的拼接 return new String(buf, true);//將buf陣列轉化為新的String例項並返回 }
在剛開始看的時候會發現其中有兩個比較陌生的方法:Arrays.copyOf(Char[] original,int newLength)
和 getChars(char dst[],int dstBegin)
再來看下原始碼:
public static char[] copyOf(char[] original, int newLength) { char[] copy = new char[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
void getChars(char dst[], int dstBegin) {
System.arraycopy(value, 0, dst, dstBegin, value.length);
}
關於上面兩個方法的作用,我在第一段程式碼的註釋中應該寫的比較清楚了。
看了這兩段程式碼之後,會發現,它們使用了同一個方法:
System.arraycopy(Object src, int srcPos,Object dest, int destPos,int length);
原始碼奉上:
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
這裡並沒有方法體,那是因為該方法有一個關鍵字修飾:native。
瞭解這個關鍵字的朋友應該知道,這代表著該方法是原生態編輯的。也就是說實現它的方法放在了其他語言
編寫的檔案中。
arraycopy方法的作用是:
將src複製到dest中,src的起始位置為srcPos,dest的起始位置為destPos,複製的長度為length;
到此,學習結束