关于字符串的拼接问题

首先我们从一道判断题开始:

String s1 = "hello";
String s2 = "world";
String s  = "helloworld";

String s3 = "hello" + "world";
String s4 = s1 + "world";
String s5 = "hello" + s2;
String s6 = (s1 + s2).intern();

System.out.println(s3 == s);
System.out.println(s3 == s4);
System.out.println(s3 == s5);
System.out.println(s4 == s5);
System.out.println(s3 == s6);

结果为:

true
false
false
false
true

结论:

  • 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
  • 只要其中有一个是变量,结果就在堆中。
  • 如果拼接的结果调用intern()方法,返回值就在常量池中

所以,如果有大量的字符串拼接操作,将会导致大量副本字符串对象存留在内存中,降低程序的运行效率。所以,如果有大量字符串拼接需求的话,一般会使用StringBuilder。