代码如下:
public static void main(String[] args) {
String a="我是String类型的balabala";
System.out.println("a: "+a);
String d=a.substring(0,11);
System.out.println("d: "+d);
System.out.println();
System.out.println("经过substring裁剪后的a: "+a);
System.out.println();
StringBuffer b = new StringBuffer("我是buffer");
System.out.println("b: "+b);
b.append(",我是buffer新添加的值");
System.out.println("b: "+b);
System.out.println();
StringBuilder c = new StringBuilder("我是bulider");
System.out.println("c: "+c);
c.append(",我是bulider新添加的值");
System.out.println("c: "+c);
}
结果截图:
String出来的字符串是存放在常量池中的,每次更改都会产生一个新的常量;
而StringBuffer和StringBulider出来的字符串存放在堆中,直接对字符串进行操作,不需要每次操作都产生一个新的字符串,是直接在原字符串上进行操作的。
StringBuffer和StringBulider的区别
StringBuffer和StringBulider的区别在于线程安全问题。
StringBuffer的方法大多使用synchronized 关键字修饰,每次使用需要判断锁,因此线程安全,但是效率较低;
StringBulider的方法没有使用synchronized 关键字修饰,因此在多线程下不安全,但是效率较高。