abe*_*t80 1 java string micro-optimization
只是好奇,哪个更有效率?
这个:
String a = someString + "." + anotherString;
Run Code Online (Sandbox Code Playgroud)
或这个:
String a = someString + '.' + anotherString;
Run Code Online (Sandbox Code Playgroud)
Mar*_*ius 13
你真的不应该关心,除非这就是你所做的,每秒数千次,持续几个小时.
有传言说使用StringBuilder是最快的.
试试它们,循环运行,一百万次,并记录所需的时间,然后向我们其他人报告.
Jon*_*eet 12
看看代码StringBuilder.append和AbstractStringBuilder.append,我希望 '.' 形式更快.
它基本上没有什么可做的:
和其他人一样,我不认为差异在实际应用程序代码中会很重要.
我不知道Java编译器是否有效地认识到附加的是长度为1的常量字符串,而是将其转换为字符文字 - 或者即使它有效也是否会这样做.
它们非常相似.'.'稍微快一点,但差别可以忽略不计(在一千万个循环中大约20毫秒).
这是我的测试:
$cat UsingC.java UsingS.java
public class UsingC {
public static void main( String [] args ) {
String someString = "";
String anotherString = "";
int i = 0;
while( i++ < 10000000 ) {
String a = someString + '.' + anotherString;
}
}
}
public class UsingS{
public static void main( String [] args ) {
String someString = "";
String anotherString = "";
int i = 0;
while( i++ < 10000000 ) {
String a = someString + "." + anotherString;
}
}
}
$for i in 1 2 3 4 5 ; do time java UsingC; done
real 0m1.643s
user 0m1.424s
sys 0m0.108s
real 0m1.670s
user 0m1.468s
sys 0m0.056s
real 0m2.023s
user 0m1.448s
sys 0m0.080s
real 0m1.669s
user 0m1.432s
sys 0m0.088s
real 0m1.674s
user 0m1.416s
sys 0m0.104s
$for i in 1 2 3 4 5 ; do time java UsingS; done
real 0m2.344s
user 0m1.584s
sys 0m0.136s
real 0m2.057s
user 0m1.640s
sys 0m0.084s
real 0m2.112s
user 0m1.732s
sys 0m0.072s
real 0m2.482s
user 0m1.704s
sys 0m0.108s
real 0m2.134s
user 0m1.788s
sys 0m0.072s
Run Code Online (Sandbox Code Playgroud)
您可以进行平均和/或创建更复杂的测试.
无论如何,它们都在内部使用StringBuilder.
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |