Cra*_*lus 26 java string performance coding-style
可能是我分裂头发,但我想知道以下情况:
String newString = a + b + c; //case 1
String newString = a.concat(b).concat(c); //case 2
StringBuilder newString = new StringBuilder(); //case 3
newString.append(a);
newString.append(b);
newString.append(c);
Run Code Online (Sandbox Code Playgroud)
哪个最好用?
我最好的意思是任何方式.
阅读这些,其他帖子说案例3不是最佳表现明智,其他案例1案例1将最终在案例3等.
更具体.
例如,将所有设置放在一边,如果你必须维护他的代码,那么哪种风格更适合从另一个程序员那里看到它?
或者您认为哪种编程效率更高?
或者你会认为更快等等.
我不知道怎么表达这个.
像案例3这样的答案可能会更快,但绝大多数程序员更喜欢案例1,因为如果它在某种程度上得到了很好的阐述,它也是最可读的
JB *_*zet 23
案例1简洁明了,表达了意图,相当于案例3.
案例2的效率较低,而且可读性较差.
案例3几乎与案例1一样有效,但更长,更不易读.
使用案例3只有在必须在循环中连接时才能使用.否则,编译器将情况1编译为情况3(除了它构造StringBuilder new StringBuilder(a)),这使得它比你的情况3)更有效.
案例3是性能最高的形式,但JVM将案例1转换为案例3.
但我认为案例2是最差的,它不像案例1那样可读,而不像案例3那样表现.
如果你想在循环中连接字符串只是用例3,你可以很容易地测试性能增益,但如果它不在循环中(或者你没有在序列中附加大量字符串)它们几乎是相同的.
您不应使用+运算符的情况是:
String a = "";
for (String x : theStrings) {
a += x;
}
Run Code Online (Sandbox Code Playgroud)
要么
String a = b + c;
a = a + d;
a = a + e;
a = a + f;
Run Code Online (Sandbox Code Playgroud)