java里字符串的连接用加号和用concat()方法有什么不同

 我来答
manwu91
推荐于2018-03-04 · TA获得超过486个赞
知道小有建树答主
回答量:385
采纳率:71%
帮助的人:289万
展开全部

首先要明白java中字符串的原理:

java中字符串其实是一个char数组,但这个数组是不可变的,所以如果改变字符串内容都会对应的重新创建一个String对象,对应的也就生成了一个新的char数组。

public String concat(String string) {
    if (string.count > 0 && count > 0) {
        char[] buffer = new char[count + string.count];
        System.arraycopy(value, offset, buffer, 0, count);
        System.arraycopy(string.value, string.offset, buffer, count, string.count);
        return new String(0, buffer.length, buffer);
    }
    return count == 0 ? string : this;
}

这是jdk中的concat源码,它保证了重新生成的String对象内部的char数组的长度刚好是字符串长度。

对于使用加号连接,编译完后其实使用的是StringBuilder对象的append方法,它也会在System.arraycopy前进行扩容。

private void enlargeBuffer(int min) {
    int newCount = ((value.length >> 1) + value.length) + 2;
    char[] newData = new char[min > newCount ? min : newCount];
    System.arraycopy(value, 0, newData, 0, count);
    value = newData;
    shared = false;
}

可以看到这个扩容操作后char数组的长度是原长度的3/2倍,这样再调用 append方法如果长度是现有长度的1/2以内,就不用再进行扩容操作,进行提高了append性能,所以使用StringBuilder时设置初始长度是很有必要的。

来自学府园好奇的桔梗
推荐于2017-11-24 · TA获得超过1300个赞
知道小有建树答主
回答量:892
采纳率:0%
帮助的人:741万
展开全部
concat()方法是在尾部添加字符串然后生成一个新的..
+号的话,感觉更加方便,看需求把.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式