我想知道字符串文字和java性能之间的关系。
例如,使用以下语句次数会对性能产生任何影响。我有数千个类,很多时候我们使用以下语句:
1) buffer.append(",");
2) buffer.append("}");
3)String.append("10,000 times...same lines") // printing same lines in many classes
3)String.someStringMethod("same line many times") // using any String method
这是否会对内存管理等方面造成性能影响。我们有更清洁的方法吗?
由于
答案 0 :(得分:3)
很难对没有意义的例子发表评论。但是:
有一两件事值得采取措施避免。主要是:
String s = "";
for (/* lots of times */) {
// do stuff
s += someOtherString;
}
问题是这会生成并丢弃大量临时字符串。更有效的方法是:
StringBuilder sb = new StringBuilder();
for (/* lots of times */) {
// do stuff
sb.append(someOtherString);
}
String s = sb.toString();
但是,如果探查器告诉您这段代码是瓶颈,那么优化此类事情可能是值得的。
答案 1 :(得分:1)
您编写的任何代码都会影响性能,因此最好使用“,}”而不是2次附加调用一个append()。
java.lang.String类中没有附加方法。
没有任何String方法对String对象进行更改。相反,String.substring(),String.concat(),String.replace()等方法会创建新的String对象。这意味着与使用StringBuffer相比,性能受到的影响更大。
因此,StringBuffer方法通常比String快。但是,最近推出了名为StringBuilder的新类。与StringBuilder只有一个区别 - 它不是线程安全的。在现实世界中,线程管理由更高级别的容器处理,因此不必确保每个类的线程安全。在这些情况下,建议您使用StringBuilder。那应该是最快的。
为了进一步提高StringBuilder的性能,您必须知道结果字符串长度以分配适当大小的StringBuilder。如果它太大你会浪费一些记忆,但这通常是一个小问题。如果它太小了,StringBuilder将不得不重新创建内部字符数组以为更多字符腾出空间。这会使特定的append()调用变慢。实际上,这不是调用缓慢,而是调用垃圾收集来清理内存。
String类的特定方法可能比StringBuffer / StringBuilder中的方法更好或更快,但是你必须更具体地回答这些问题才能回答这个问题。