String字符串的拼接
大约 1 分钟java
概述
常见的字符串拼接可以通过+,StringBuilder,StringBuffer实现字符串的拼接。
实现
使用+实现字符串拼接
代码如下:
public class StringSpliceTest {
public static void main(String[] args) {
String s = "aaaa" + "bbbbbbb";
User user = new User("1111111111111");
String aa = "fffff" + user.getName();
}
public static class User{
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
使用javac命令进行编译后得到的class文件如下图右边所示:

如上图绿色标记所示,当使用+对字符串进行连接时,会创建一个临时的StringBuilder对象,该对象调用append方法负责字符串的连接操作,然后再调用StringBuilder类的toString方法转换成String对象。但是红色标记部分却没有创建StringBuilder对象,这是因为当使用运算符“+”连接字符串时,如果两个操作数都是编译时常量,则在编译时期就会计算出该字符串的值,而不会在运行的时候创建StringBuilder对象。
性能优化
如果是在循环中对String对象进行连接,应该直接使用StringBuilder代替String的+连接,这样可以提高性能 。
StringBuilder
代码如下:
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("a").append("b").append("c");
System.out.println(stringBuilder.toString());
默认内部维护了一个大小为16的char数组,当append内容的长度总和超过该值时,会进行扩容操作,底层通过System.arraycopy实现数组的复制,如果知道拼接的长度,最好初始化的时候手动指定大小。
StringBuffer
StringBuffer与StringBuilder使用方法类似,区别就是StringBuffer内部使用synchronized来保证多线程环境下线程安全。