字符串的那点事 本帖最后由 BaronZ 于 2012-12-02 22:17:50 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看就明白:http://zhidao.baidu.com/question/301700630.html append是追加字符串,不会生成一个新的对象,+号,没+一次就生成一个新的对象,你说循环1000此,多少字符串对象?可以想象那种效率高了。 sb.append(i+"");你这个有点自欺欺人了...这个写法和上面那个有区别吗...都是做了一次字符串加这个应该这样写sb.append(i).append("[凡是用加号连接的部分]"); 百度知道上的空上好像有点道理,高手吗觉得怎样?str += "here";可以等同于StringBuffer sb = new StringBuffer(str);sb.append("here");str = sb.toString(); http://blog.csdn.net/yirentianran/article/details/2871417这个博客写的挺好的,其实+的连接操作实现上还是通过StringBuffer或者StingBuild实现的,+操作和StringBuffer的效率在于,当大数据量操作时,+需要创建多次StringBuffer对象,然后再append,区别应该就在这里。 其实主要原因不是LZ说的空间的问题,假设空间足够大,你再多的对象不回收和这个效率没有多大关系的。5 楼说的对一半,主要原因是 循环的过程,对于 String的 新对象(即 +),首先会转换成StringBuffered,然后生成新的对象,再从 StringBuffered转变成为所需的String;而对象StringBuffered 则不会产生新的对象,也就是说在循环结束之前都一直追加结束。从上面的过程,就知道 对于用第一种情况,效率当然不高了。 我补充吧,本来我还怕我说的不对,后来我去查了一下资料,确实了我的答案,我整理了一下,LZ 应该可以清楚了,这次:首先,我在 14 楼说的对了,举个简单的例子吧:对于String 类,有一个字符串并接,也就是“+”,操作符的运算。对于 String s = "a" + "4" + "b";等价于:String s = new StringBuffered().append("a").append("4").append("b").toString();(这里是合并着写)。这个例子足够说明我在 14 楼说的观点了。 javaSE java文件怎么不显示java图标? 急急急!!!!!!!!!!!!!!!!!!! 这个while(true)怎么退出循环的?(二分查找法里的) core java 2 中是不是出错了? 怎么二重遍历ArrayList Socket编程中为什么readLine()返回的字符串前面总有\u0000? 如何得到一个树的最长路径(500分求救)? 如何得到命令的输出信息 求教applet的问题 求教java中的drawString()方法 散分啦--收藏Java项目
你这个有点自欺欺人了...这个写法和上面那个有区别吗...都是做了一次字符串加
这个应该这样写
sb.append(i).append("[凡是用加号连接的部分]");
str += "here";
可以等同于
StringBuffer sb = new StringBuffer(str);
sb.append("here");
str = sb.toString();
5 楼说的对一半,主要原因是 循环的过程,对于 String的 新对象(即 +),首先会转换成StringBuffered,然后生成新的对象,再从 StringBuffered转变成为所需的String;
而对象StringBuffered 则不会产生新的对象,也就是说在循环结束之前都一直追加结束。
从上面的过程,就知道 对于用第一种情况,效率当然不高了。
首先,我在 14 楼说的对了,举个简单的例子吧:
对于String 类,有一个字符串并接,也就是“+”,操作符的运算。
对于 String s = "a" + "4" + "b";
等价于:
String s = new StringBuffered().append("a").append("4").append("b").toString();
(这里是合并着写)。
这个例子足够说明我在 14 楼说的观点了。