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;

到此,学习结束

猜你喜欢

转载自blog.csdn.net/jiassi/article/details/83755877