String特性
String类是final的,不可被继承,本质是字符数组,其值不可变
String x = “abc” , “abc”表示字符串对象,x表示对象的引用
String通过+串联得到的是一个新的字符串
String pool 用来存放运行中产生的字符串,内容不重复,存在与方法的堆栈区
String创建原理
- 当 s=X 创建String对象时,java会拿着这个X去pool中找有没有相同内容的对象,有则s直接指向它,无则创建
- 使用new创建的对象,一定会在堆区创建新对象
- 使用+ 号串联方式创建新对象,只会检查池中对象
- 使用包含变量的表达式来创建一个String对象,会检查pool,也会在堆栈区创建一个String对象
过程分析
String str = “abc”;
System.out.println(str == “abc”);
栈中开辟一块空间存放引用str
pool中存放”abc”,str指向pool中的abc
结果返回true,地址相等
String str = new String(“abc”);
str == “abc”
返回false
str指向堆中对象,而abc地址在池中
String str2 = new String(“abc”)
str == str2
返回false
str2指向堆中开辟的新空间
String str3 = “s” + “y”;
str3 == “sy”
pool中存放sy 常量sy也指向pool中的sy 返回true
String s1 = “aa”
String s2 = “bb”
String s = s1 + s2
s == “aabb”
返回false
两个变量连接 调用的是toString()方法,在堆中开辟一个新的空间存放对象