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
来保证多线程环境下线程安全。