package daimatest;
public class Test2 {
public static void main(String[] args) {
String s1= new String("abc");//两个对象(堆中,常量池中)
String s2 = "abc";//常量池中
System.out.println(s1==s2);//false
String s3 = s1.intern();//入池操作
System.out.println(s2==s3);//true
}
}
String对象的intern方法,首先会检查字符串常量池中是否已经存在“abc”,如果存在返回该字符窜的引用,如果不存在,则把“abc“添加到字符串常量池中,并返回该字符窜的引用。
package exms;
public class Test4 {
public static void main(String[] args) {
String s = "abc";
s = "abcd";
StringBuilder builder = new StringBuilder(s);
builder.append("d");
StringBuffer buffer = new StringBuffer(s);
buffer.append("d");
}
}
- String是不可变的,如果尝试去修改,会新生成一个字符串对象,StringBuilder和StringBuffer是可变的
- StringBuffer是线程安全的,StringBuilder是线程不安全的,所以在单线程环境下StringBuilder效率会更高



