关于字符串的拼接问题
首先我们从一道判断题开始:
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。