1.1 Java String 对象的特点
1) 通过New对象创建的字符串对象,每一次new都会申请一个堆内存空间,虽然内容相同,但是地址不同
S1 S2是不同的对象!!!
String s1 = new String(chs);
String s2 = new String(chs);
2)以“”给出的字符串对象,只要字符序列相同,无论在程序中出现几次,JVM都只会建立一个String对象,并且在字符串池中维护。
S3 S4是同一个对象!!!
String s3 = “abc”;
String s4 = “abc”;
针对第一行代码,JVM会建立一个String对象放在字符串池中,并给出s3参考;第二行则让s4直接参考字符串池中的String对象,本质上他们是同一个对象
package javabase;
public class String1 {
public static void main(String[] args)
{
char[] chs = {‘a’,‘b’,‘c’};
String s1 = new String(chs);
String s2 = new String(chs);
System.out.println(s1 == s2);
String s3 = "abc";
String s4 = "abc";
System.out.println(s3 == s4);
}
}
结果:false
true
梳理String字符串的特点:
1. 字符串不可以改变 但是可以被共享(字符串常量池)
重点:字符串之间拼接,系统底层会自动创建一个StringBuilder对象,然后在调用append方法完成拼接,拼接之后在调用toString方法完成转换成String类型,开辟了一个新的内存空间。
Java存在常量优化机制,在编译的时候,就会将"a" + “b” + “c"拼接为"abc”,
上面那个为什么不是?
因为S2 是一个变量,这里存在系统底层自动创建StringBuilder对象 进行拼接转化的过程