StringBuilder
StringBuilder 代表可变字符串对象,相当于是一个容器,里面装的字符串是可以改变的,就是用来操作字符串的。
StringBuilder 比String更适合做字符串的修改操作,效率更高,代码更加的简洁。
public class HelloWorld {
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder("abc");
s1.append("abc");
s1.append("123");
s1.append("哈哈哈");
s1.append(true);
System.out.println(s1);//abc123哈哈哈true;
s2.append("123").append("哈哈哈").append(true);
System.out.println(s2);//abc123哈哈哈true;
s1.reverse();//字符串反转
System.out.println(s1);//eurt哈哈哈321cba;
System.out.println(s1.length());//13 返回字符串的长度
System.out.println(s1.toString());//转为String类型
}
}
StringBuilder 是可变的,对字符串的修改不会产生新的对象
public class HelloWorld {
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder();
System.out.println(System.identityHashCode(s1));//1324119927
s1.append("abc");
s1.append("123");
s1.append("哈哈哈");
System.out.println(System.identityHashCode(s1));//1324119927
}
}
变量改变前后对像的哈希地址并没有发生改变,表明修改是在原对象上进行的
StringBuilder 是非线程安全的,这意味着在多线程环境中同时访问和修改它可能会导致数据不一致。
StringBuffer
StringBuffer 是一个线程安全的可变字符串类,所有的方法都是同步的。这意味着在多线程环境中可以安全地使用 StringBuffer。
比 StringBuilder,性能稍差,因为同步机制增加了开销。
其构造器和方法与StringBuilder 类似。
StringJoiner
StringJoiner 是 Java 8 引入的一个类,用于构建由定界符分隔的字符串序列。它提供了一种方便的方式来连接字符串,并允许指定前缀和后缀。
public class HelloWorld {
public static void main(String[] args) {
StringJoiner s = new StringJoiner(",","[","]");
s.add("123");
s.add("hhh");
s.add("哈哈哈");
System.out.println(s);//[123,hhh,哈哈哈]
System.out.println(s.length());//13
}
}
总结
StringBuilder:适用于单线程环境中需要频繁修改字符串的场景,具有高效的性能。
StringBuffer:适用于多线程环境中需要频繁修改字符串的场景,线程安全但性能稍逊于 StringBuilder。
StringJoiner:适用于需要构建带定界符的字符串序列的场景,提供了简洁的 API 来处理前缀、后缀和分隔符。