紧急求救,关于java String的问题

good_12345678 2009-09-19 02:40:26
我们知道在jdk1.4中对String的处理不是太好,编译器为每一个字符串常量开辟一个空间,String的不变性的机制显然会在String常量内有大量的冗余。所以我们在处理大量的字符串连接时,而且要求性能时,我们都是使用StringBuffer,而不使用String。

我想请教的是,在jdk1.5及其以上版本中,改问题有没有得到解决,我曾经看过一篇文章,说道过这个问题,说1.5中该问题已经解决了,但是我不知道到底怎么样啊,这个文章在这里:
http://www.tolover.cn/index.php/archives/262

请教高手啊,在jdk1.5中,是不是可以不用在意String的链接运算,不需要用StringBuffer代替String使用了,因为我现在做的项目中开始没有注意这个问题,所以要把String链接的地方替换成StringBuffer,工作量那是相当的大啊。

项目已经卡在这里了,不敢决定是否要处理String的问题,紧急求救啊。磕头感谢,紧急紧急。
...全文
139 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yubangqi 2009-09-20
  • 打赏
  • 举报
回复
大量的字符串相连接还没遇见过
chenchengamao 2009-09-19
  • 打赏
  • 举报
回复
去看看《深入JAVA虚拟机》可能会得到答案哦。
ouyangyh 2009-09-19
  • 打赏
  • 举报
回复
个人感觉,两个在用在不同的场合
如果只是使用一个单独的字符串或简单的几个字符串连接
就用String ,更快
但如果连接次数我了
就用StringBuffer吧
ZangXT 2009-09-19
  • 打赏
  • 举报
回复
1.4也不用特殊处理吧,记得1.4用StringBuffer,1.5不过是使用了新增的StringBuilder。

是否需要自己特殊处理看实际的需要。
比如只是简单的
String result = a + b + c + d +***+ z;
这样一些字符串的链接的话,没有必要自己再用StringBuilder或者StringBuffer来处理链接,因为编译器会帮我们处理,而且代码看起来更优雅。

但是如果你的程序类似这样,要通过大量的循环来链接字符串:

String str = "";
for(int i = 0; i < 100; i++){
str += i;
}


那就很有必要适合这样处理:

String str = "";
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 100; i++){
builder.append(i);
}
str = builder.toString();

因为循环的情况中编译器是在每次循环插入一个StringBuilder对象,这就不如我们自己的代码优化了。
hyhymn 2009-09-19
  • 打赏
  • 举报
回复
学习.
taolei 2009-09-19
  • 打赏
  • 举报
回复
这个问题确实还是要自己解决。大量的字符串连接在任何java版本里都是需要用 StringBuffer或StringBuilder的。
StringBuilder更好一些。
StringBuffer支持线程安全,但这一特性完全是个多余的东西。
logon29 2009-09-19
  • 打赏
  • 举报
回复
2楼的例子只是说明问题的存在,是否要改,还是要看你自己的代码。

你测试下你的代码,看性能是否就相差那么大?10来次的运算和1w次的for循环运算,本身就有非常大的差异。
logon29 2009-09-19
  • 打赏
  • 举报
回复
那是1.4的情况了,1.5之后,在编译的时候,就已经帮你处理了。
lycrsx 2009-09-19
  • 打赏
  • 举报
回复
向各位前辈学习
good_12345678 2009-09-19
  • 打赏
  • 举报
回复
真是伤心哦,还是需要处理这个问题,工作量大了。
上面前辈的那个例子很直观的说明了这个问题,二者的性能还是有差别的,差别还大。
logon29 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 logon29 的回复:]
即使是的1.4的时候,处理string连接也不会导致性能上的问题。。。

1.5以上可以不用考虑这个问题。


[/Quote]

大量string相加还是非常少见的。在实际开发中,10来个相加都算多了,对于现在的机器来说,这个代码性能上的差异基本不用考虑。
good_12345678 2009-09-19
  • 打赏
  • 举报
回复
非常感谢各位前辈的指教,真是雪中送炭啊,java号称最面向对象的语言,第一次使用java的时候,看到String类,觉得很好,心想,java吗,肯定各种安全性都考虑到了,压根没想过String在字符串链接中有可能会出现的性能问题,后来无意的看到一篇说明String的文章,一搜,才发现网上关于java String的论述铺天盖地,说的我心里也没有底了,现在既然各位前辈都说String链接没问题,那就是没问题了。

呵呵,我心里还是没有底啊,各位前辈,String在字符串链接时,真的不会产生冗余吗?麻烦前辈再次给我确认一下,真的没问题吗?如果真没问题,后我就再也不考虑这个问题了。
张_锋 2009-09-19
  • 打赏
  • 举报
回复
实验一下最能说明问题了,参考一下这里:http://blog.csdn.net/sunshinestation/archive/2009/04/09/4058973.aspx, 应该还是有差别的。
logon29 2009-09-19
  • 打赏
  • 举报
回复
即使是的1.4的时候,处理string连接也不会导致性能上的问题。。。

1.5以上可以不用考虑这个问题。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧