String:不可改变的Unicode字符序列。
public static void main(String[] args) {
String a = "a";
String b = "a";
String c = new String("a");
System.out.println(a == b);//true
System.out.println(a == c);//false
}
在String类中
当以字面值的方式创建时(即String str = “str”),会到java方法串池作用去查找(池化思想),如果存在则直接返回地址,否则会在串池中创建该字符串对象并返回
当以new的方式创建时,则直接在堆空间出纳将String类对象。
所以a=b而a≠c,因为==比较的是对象的地址
池化思想:把需要共享的数据放在池中,即用一个储存区域来存放一些公共资源以降低储存空间的开销
当在使用String做+
号拼接时(String a = “b” + “c” + “d”),会在串池中生成多余的对象(“bc”),所以,如果进行大量的字符串连接时,应该使用可变的Unicode字符序列对象进行拼接操作。
StringBuffer:可改变的Unicode字符序列,允许并发,线程安全
StringBuilder:可变的Unicode字符序列,不支持并发操作,非线程安全