我们知道在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的问题,紧急求救啊。磕头感谢,紧急紧急。
http://www.tolover.cn/index.php/archives/262请教高手啊,在jdk1.5中,是不是可以不用在意String的链接运算,不需要用StringBuffer代替String使用了,因为我现在做的项目中开始没有注意这个问题,所以要把String链接的地方替换成StringBuffer,工作量那是相当的大啊。项目已经卡在这里了,不敢决定是否要处理String的问题,紧急求救啊。磕头感谢,紧急紧急。
大量string相加还是非常少见的。在实际开发中,10来个相加都算多了,对于现在的机器来说,这个代码性能上的差异基本不用考虑。
StringBuilder更好一些。
StringBuffer支持线程安全,但这一特性完全是个多余的东西。
比如只是简单的
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对象,这就不如我们自己的代码优化了。
如果只是使用一个单独的字符串或简单的几个字符串连接
就用String ,更快
但如果连接次数我了
就用StringBuffer吧