永发信息网

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

答案:2  悬赏:50  手机版
解决时间 2021-03-31 13:35
  • 提问者网友:鼻尖触碰
  • 2021-03-31 02:20
java里字符串的连接用加号和用concat()方法有什么不同
最佳答案
  • 五星知识达人网友:廢物販賣機
  • 2021-03-31 03:06
首先要明白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时设置初始长度是很有必要的。

全部回答
  • 1楼网友:低音帝王
  • 2021-03-31 03:53
concat()方法是在尾部添加字符串然后生成一个新的..
+号的话,感觉更加方便,看需求把.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯