永发信息网

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

答案:2  悬赏:50  手机版
解决时间 2021-03-31 13:35
java里字符串的连接用加号和用concat()方法有什么不同
最佳答案
首先要明白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时设置初始长度是很有必要的。

全部回答
concat()方法是在尾部添加字符串然后生成一个新的..
+号的话,感觉更加方便,看需求把.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
mysql怎么创建用户组
一个人骑牛是什么诗句
后面要加ed.这个ed是有什么作用,什么时候加e
华为mate10为什么那么卡
microsoft office word 遇到问题需要关闭,总
规范场的阿贝耳规范场和非阿贝耳规范场
引滦入津工程的建设情况
人步行的速度
如何在OpenMP中将对象或结构体定义为threadpr
对英超和NBA提不起兴趣了,是不是老了
A333Gr6属于什么钢种,A333Gr6与304L进行焊接
如何 在 e hentai。org 上面注册账号 全是英
求电流I的值
河南电视台法制频道王金战老师2015年12月5日
落枕怎么睡觉
推荐资讯
请教ZRBVR 2*2.5 C15-VXC-M
重庆简盖的发型师谁技术最好
怎样才能让男人怕我,不敢招我,不敢惹我,不
节奏大师通全关后,还有很多隐藏歌咋办???
美甲贴在上面的水钻怎么除去
html5新技术有哪些
穷人为什么穷
彩虹合唱团神曲《春节自救指南》小号出自哪里
求勾人解卦:卦象:兑卦(同卦)2011-5-25早7
人累了可以躺下休息,心累了怎么办?
制作水火箭的简单方法
800厘米=( )毫米
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?