kos*_*tja 341 java string performance
通常认为StringBuilder在Java中使用字符串连接通常是优选的.总是这样吗?
我的意思是:创建一个StringBuilder对象的开销,调用append()方法,最后toString()已经小了,然后将现有的字符串与+运算符连接两个字符串,或者只建议更多(超过两个)字符串?
如果有这样的阈值,它依赖于什么(可能是字符串长度,但以哪种方式)?
最后,您是否会交换+串联的可读性和简洁性,以便StringBuilder在较小的情况下(如两个,三个或四个字符串)的性能?
StringBuilder在过时的Java优化技巧以及Java都市神话中,人们提到明确使用常规连接已经过时了.
Ral*_*lph 478
如果你在循环中使用字符串连接,这样的话,
String s = "";
for (int i = 0; i < 100; i++) {
s += ", " + i;
}
Run Code Online (Sandbox Code Playgroud)
然后你应该使用StringBuilder(而不是StringBuffer)而不是a String,因为它更快,消耗更少的内存.
如果你有一个声明,
String s = "1, " + "2, " + "3, " + "4, " ...;
Run Code Online (Sandbox Code Playgroud)
那么你可以使用Strings,因为编译器会StringBuilder自动使用.
zaw*_*tut 51
拉尔夫的答案非常棒.我宁愿使用StringBuilder类来构建/装饰String,因为它的使用更像是Builder模式.
public String decorateTheString(String orgStr){
StringBuilder builder = new StringBuilder();
builder.append(orgStr);
builder.deleteCharAt(orgStr.length()-1);
builder.insert(0,builder.hashCode());
return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)
它可以用作帮助器/构建器来构建String,而不是String本身.
Ria*_*ius 38
作为一般规则,始终使用更易读的代码,并且只有在性能成为问题时才重构.在这种特定情况下,最新的JDK实际上将在任何情况下将代码优化为StringBuilder版本.
如果您在循环中或在编译器无法轻松优化的某些复杂代码中进行字符串连接,通常只需要手动执行此操作.
请查看:http://www.javaspecialists.eu/archive/Issue068.html和http://www.javaspecialists.eu/archive/Issue105.html
在您的环境中执行相同的测试,并检查更新的JDK或Java实现是否更好地使用String或更好地执行某种类型的字符串操作StringBuilder.
某些编译器可能无法用StringBuilder等效替换任何字符串连接.在依赖编译时优化之前,请务必考虑源代码将使用哪些编译器.
| 归档时间: |
|
| 查看次数: |
266038 次 |
| 最近记录: |