为了账号安全,请及时绑定邮箱和手机立即绑定

字符串操作:为什么方法 1 不如方法 2 有效

字符串操作:为什么方法 1 不如方法 2 有效

凤凰求蛊 2022-11-02 16:52:28
我有一个问题,我必须以两种不同的方式连接两个或多个字符。方法1如下:String s = "";for( int i = 0; i < 10; ++i ){StringBuffer t = new StringBuffer();t.append( s );t.append( i );t.append( " " );s = t.toString();}第二种方法是:StringBuffer b = new StringBuffer();for( int i = 0; i < 10; ++i ){b.append( i );b.append( ' ' );}String s = b.toString();在书(Programming interview暴露)中提到,第二种方法更有效地编码。为什么会这样?是不是因为 Stringbuffer 的对象 t 最初不是在 for 循环中重复的。需要澄清一下。
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

方法 1 定义了一个新的 StringBuffer 并在每次迭代时调用 toString(),与方法 2 相比,方法 2 只创建了一次 StringBuffer,并且只调用了一次 toString(),它使用了更多的操作和内存



查看完整回答
反对 回复 2022-11-02
?
动漫人物

TA贡献1815条经验 获得超10个赞

干得好。我的评论确定了第一种方法的额外开销。



String s = "";

for( int i = 0; i < 10; ++i ){


// create this for each iteration

StringBuffer t = new StringBuffer();


// extra method call to add string in progress

t.append( s ); 


t.append( i );


// more overhead appending string than a char

t.append( " " );


// convert StringBuffer to a string to append back in later

s = t.toString();

}

对于这两种方法,StringBuilder 应该优先于 StringBuffer。使用线程时首选后者,因为它是同步的。因此,如果您不使用线程,请使用 StringBuilder。


查看完整回答
反对 回复 2022-11-02
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您的方法 1 消耗了大量不必要的内存,与方法 2 相比,它不是必需的。即使您可以使用 StringBuilder 而不是 StringBuffer ,您也可以阅读 javadoc,了解为什么 StringBuilder 比 StringBuffer 更快 n 以及需要使用的地方什么。



查看完整回答
反对 回复 2022-11-02
  • 3 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信