一.区别
1.String是不可变的,也就是说,一旦创建了一个String对象,就不能再修改它的值。每次对String进行修改时,都会创建一个新的String对象,这会导致内存的浪费。因此,如果需要频繁地对字符串进行修改,使用String会导致性能问题。
2.StringBuffer和StringBuilder都是可变的,它们可以动态地添加、删除和修改字符串中的字符。两者的功能基本相同,但StringBuilder的性能更好,因为它没有实现线程安全的功能,所以在单线程环境下使用StringBuilder比StringBuffer更快。
3.StringBuffer是线程安全的,它的所有公共方法都是同步的,因此多个线程可以同时访问一个StringBuffer对象而不会出现线程安全问题。但是,由于同步的开销,StringBuffer的性能比StringBuilder差。
如果需要频繁地对字符串进行修改,并且在多线程环境下使用,应该使用StringBuffer;
如果在单线程环境下使用,应该使用StringBuilder;如果二不需要修改字符串,应该使用String。
二. StringBuilder的使用
1. StringBuilder的构造方法
public class StringBuilderDemo {
public static void main(String[] args) {
//创建空白可变字符串对象,不含有任何内容
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length():" + sb.length());
//根据字符串的内容,来创建可变字符串对象
StringBuilder sb2 = new StringBuilder("hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2.length():" + sb2.length());
}
}
/*
sb:
sb.length():0
sb2:hello
sb2.length():5
*/
2.StringBuilder的添加和反转方法
public class StringBuilderDemo2 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
//public StringBuilder append(任意类型),添加数据,并返回对象本身
// StringBuilder sb2 = sb.append("hello");
// System.out.println("sb:" + sb);
// System.out.println("sb2:" + sb2);
// System.out.println(sb == sb2);
// sb.append("hello");
// sb.append("world");
// sb.append("Java");
// sb.append("123");
//链式编程
sb.append("hello").append("world").append("java").append(100);
System.out.println("sb:" + sb);
//public StringBuilder reverse():返回相反的字符序列
sb.reverse();
System.out.println("sb:" + sb);
}
}
/*
sb:helloworldjava100
sb:001avajdlrowolleh
*/
三..StringBuilder 和 String 相互转换
1.StringBuilder转换为String
public String toString(): 通过 toString()就可以实现把StringBuilder转换为String
2.String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder
public class StringBuilderDemo3 {
public static void main(String[] args) {
/*1.StringBuilder转换为String
// StringBuilder转换为String
StringBuilder sb = new StringBuilder();
sb.append("hello");
//String s = sb; 错误
String s = sb.toString();
System.out.println(s);
*/
//2.String转换为StringBuilder
String s = "hello";
StringBuilder sb = new StringBuilder(s);
System.out.println(sb);
}
}
StringBuilder和StringBuffer的用法基本一致,此处不再介绍