转载
字符串拼接在程序中是很常用的,关键是需要了解各种字符串拼接方式原理,优先选择最好的字符串拼接方式。Java程序中提供了几种不同的拼接方式。
“+”号字符串拼接是最简单方便的方式,刚学编程的时候,几乎都是用此方式。
1)字符串拼接方式
String s1 = "ouyangjun";
String s2 = "p812438109";
System.out.println(s1 + s2); // ouyangjunp812438109
2)反编译之后的源码
System.out.println(new StringBuilder(String.valueOf(s1)).append(s2).toString());
结论:编译时,先new一个StringBuilder对象,再把参数append到对象中,最后再toString。
3)字符串拼接方式
String s1 = "ouyangjun";
String s2 = "p812438109";
String s3 = "";
for (int i = 0; i < 10000; i++) {
s3 += s1 + s2;
System.out.println(s3);
}
4)反编译之后的源码
String s1 = "ouyangjun";
String s2 = "p812438109";
String s3 = "";
for (int i = 0; i < 10000; i++) {
s3 = new StringBuilder(String.valueOf(s3)).append(s1).append(s2).toString();
System.out.println(s3);
}
结论:在用"+"号拼接时,不管是什么方式拼接,都是会不断new StringBuilder对象。如循环次数越多,该拼接方式性能会越低,最终可能导致内存溢出等问题。现在程序中都不建议用该方式拼接字符串了。
1)StringBuffer字符串拼接和反编译之后的源码是一样,没有太大的区别,如下。
StringBuffer buffer = new StringBuffer();
buffer.append("ouyangjun");
buffer.append("p812438109");
System.out.println(buffer); // ouyangjunp812438109
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < 10000; i++) {
buffer.append("ouyangjun").append("p812438109");
System.out.println(buffer);
}