问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

StringBuffer与String类进行字符串连接时有什么区别?

发布网友 发布时间:2022-04-24 14:07

我来回答

3个回答

懂视网 时间:2022-04-24 18:29

大字符串的连接最好使用数组,把每个子串放入数组元素,再执行join()连接起来,其效率比+=有明显的提高。

因此,可以由此原理写一个简单的 StringBuffer 类,在遇到大字符串连接时可以派上用场。

//by misshjn

function StringBuffer(){
this.data = [];
}
StringBuffer.prototype.append = function(){
this.data.push(arguments[0]);
return this;
}
StringBuffer.prototype.toString = function(){
return this.data.join("");
}


或者这样也可以
(参考)

function method2()
{
var result = "";
var a = new Array();
for(var i=0; i {
a[i] = str;
}
result = a.join(""); a=null;
return result;
}

热心网友 时间:2022-04-24 15:37

他们的区别是很大的,它们是两个独立的类,可以这么说吧,除了名字有些相似,完全不相干.String类是不可改变的,如果你更改了String类的实例,那么以前的就“不存在了”,所指向的是一个新的实例。而StringBuffer类是可以更改的。
看如下例子,体会这一点:
String s1="Hello";
String s2="Hello";
if(s1==s2)
System.out.println("Equal");
else
System.out.println("Not equla");
这个程序片断将输出Equal,原因是String类的实例是不能更改的.在生成第2个实例时它发现在缓冲池中已经有了"Hello"字符串,于是它就直接索引到这个字符串.
然而如果,你将第二行代码改为:
String s2 = new String("Hello");
再运行结果将是Not equal,因为更换了一个构造器形式,在生成第二个实例时,它就不在缓冲池中索引了,而是直接在内存中构造这样一个对象.因此,其句柄的值是不同的.
也就是说,当你更改了String类的实例,那么其句柄索引的将是在Heap Memory的另外一个位置的对象,以前的就不能再索引到了.
但是,StringBuffer类却不是如此,如果你更改了它的实例,但是在Heap Memory的缓冲池中,索引的是同一个实例.即更改了实例,但句柄的只是不变的,它是可以更改的!

热心网友 时间:2022-04-24 16:55

StringBuffer是在内存开辟一块存储空间,在里面可以增加字符,如果满了的话,再增加存储空间
String是一个常量,进行连接时,会创建一个新的String对象,如果进行连接很频繁的话用StringBuffer,String的效率比较底.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
3岁儿童不带证件能坐高铁吗 没有身份证的儿童怎么坐高铁 奔驰迈巴赫S级21款S 480 4MATIC高端豪华轿车 安全库存与再订货点 安全库存最简单三个公式 儿童学平险和附加意外伤害医疗保险有那些相同和不同的地方吗?_百度知 ... 转转买手机靠谱吗??? 15千瓦用多大铝芯电缆线 女孩去男朋友家需要带什么继续鸭? 请问第一次去男朋友家拿两瓶酒,一盒茶,和一些水果可以吗?会不会太多... 德国fa工厂自动化 有哪些主流品牌? 谢谢 哪个公司的 FA工厂自动化零件目录 用的最广泛?请问,机械行业的 谁知道国内哪家FA工厂自动化零件厂家供货质量好? 奥迪A3的性价比高吗?它的隔音差吗? 奥迪A3的性价比高吗?它的刹车硬吗? 一年级语文生字组词汇总,帮助孩子熟记生字和拼音,你知道有哪些吗? 退役军人死亡后有哪些补贴 退伍军人办伤残证如何办理 咨询退伍军人可否补评残疾军人证 如何申请补办残疾军人等级? 军人8级伤残退伍能补偿多少钱 退伍军人补办残疾证后何时领抚恤金? 军人在服役期间因病致残,退役数年后还可以补评残吗? 我在淘宝给卖家的评价为什么经常会消失呢? 军人残疾补助标准2020 军残补助最新标准2022 javascript 代码性能测试: 并没有出现和资料上说的:“用StringBuffer类进行字符串连接比'+'运算符要快” 2020年9月份月利率2分合法吗? 爸爸妈妈不在老家,如何给孩子查陕西榆林健康码 QQ聊天上的彩色艺术字体是怎么下载的 小猫安妮美容仪淘宝是真的还是京东 美容仪都有哪些牌子呀? 女朋友最近想买个美容仪,我要选个什么样的送她好呢?(本人学生党) 怎么样才能改善换季时候的皮肤呢? Nos基因对猫咪的影响 激光脱毛会影响智商吗? 普罗米修斯2 异形契约 百度云 求求 谁有《异形·契约》的资源,不要电影院里拍的哦 千万别错过战争科幻片, 部部都是经典 有没有相关的影视百度网盘资源? 《异形:契约》据说是“异形”系列最恐怖的一部? 异形:契约为什么电影院还没有 我想听异形契约里面的众神进入英灵殿 谁能告诉我在哪能听到 营销移动宽带的难处 移动,合家欢宽带 考出CPA证书之后应该如何利用 CPA全科证的使用 摘记卡的内容是什么? 可爱豆奇遇记美好的朋友会2缩短摘记卡内容怎么写 请问,鱼类属于海洋资源还是动物资源?谢谢! 连接字符串的时候为什么用StringBuffer而不用String