1. 程式人生 > >String concat(String str) 學習

String concat(String str) 學習

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;

到此,學習結束