首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

字符串的那点事解决方法

2012-12-20 
字符串的那点事本帖最后由 BaronZ 于 2012-12-02 22:17:50 编辑String str nullStringBuffer sb new

字符串的那点事
本帖最后由 BaronZ 于 2012-12-02 22:17:50 编辑


String str = null;
StringBuffer sb = new StringBuffer();
for(int i=0;i<100;i++){
  str = str + i;//(1)不推荐
  sb.append(i+"");//(2)推荐
}

我们都知道,像(1)那种方式去对字符串进行改变是不推荐的。对于不推荐的原因,我自己的理解是,
String定义的是字符串常量,值是不可改变的。如果进行(1)的操作,每次就会生成一个新的字符串常量(改变之前的那个字符串常量会被垃圾回收吗?)。这样效率就会低。是这个原因不推荐吗?
麻烦大神们解释一下


================================广告分割线===============================


[最优解释]
看看就明白:http://zhidao.baidu.com/question/301700630.html
[其他解释]
我补充吧,本来我还怕我说的不对,后来我去查了一下资料,确实了我的答案,我整理了一下,LZ 应该可以清楚了,这次:
首先,我在 14 楼说的对了,举个简单的例子吧:
对于String 类,有一个字符串并接,也就是“+”,操作符的运算。
对于 String s = "a" + "4" + "b";
等价于:
String s = new StringBuffered().append("a").append("4").append("b").toString();
(这里是合并着写)。
这个例子足够说明我在 14 楼说的观点了。
[其他解释]
引用:
各路高手有没有其他高见?
http://blog.csdn.net/yirentianran/article/details/2871417这个博客写的挺好的,其实+的连接操作实现上还是通过StringBuffer或者StingBuild实现的,+操作和StringBuffer的效率在于,当大数据量操作时,+需要创建多次StringBuffer对象,然后再append,区别应该就在这里。
[其他解释]
其实主要原因不是LZ说的空间的问题,假设空间足够大,你再多的对象不回收和这个效率没有多大关系的。
5 楼说的对一半,主要原因是 循环的过程,对于 String的 新对象(即 +),首先会转换成StringBuffered,然后生成新的对象,再从 StringBuffered转变成为所需的String;
而对象StringBuffered 则不会产生新的对象,也就是说在循环结束之前都一直追加结束。
从上面的过程,就知道 对于用第一种情况,效率当然不高了。。。。
[其他解释]
append是追加字符串,不会生成一个新的对象,+号,没+一次就生成一个新的对象,你说循环1000此,多少字符串对象?可以想象那种效率高了。
[其他解释]
是的,你说的没错
[其他解释]
我也觉得没错
[其他解释]
你的理解是对的。
[其他解释]
引用:
append是追加字符串,不会生成一个新的对象,+号,没+一次就生成一个新的对象,你说循环1000此,多少字符串对象?可以想象那种效率高了。


+1
StringBuffer吧!
[其他解释]
sb.append(i+"");
你这个有点自欺欺人了...这个写法和上面那个有区别吗...都是做了一次字符串加
这个应该这样写
sb.append(i).append("[凡是用加号连接的部分]");
[其他解释]
只要分享就有功劳。
[其他解释]

路过,顶个

[其他解释]
大周一的,顶起来给高手看看 
[其他解释]
引用:
append是追加字符串,不会生成一个新的对象,+号,没+一次就生成一个新的对象,你说循环1000此,多少字符串对象?可以想象那种效率高了。

之前旧的对象不会被回收吗?
[其他解释]
引用:
看看就明白:http://zhidao.baidu.com/question/301700630.html

百度知道上的空上好像有点道理,高手吗觉得怎样?
str += "here";
可以等同于
StringBuffer sb = new StringBuffer(str);


sb.append("here");
str = sb.toString();
[其他解释]
各路高手有没有其他高见?

热点排行