5. 字符串与数组
5.1 字符串创建与存储的机制是什么
字符串声明与初始化主要有如下两种情况:
1.对于Strng s1=new String(“abc”)与String s2=new String(“abc”),存在两个引用对象s1,s2,两个内容相同的字符串对象“abc”,在内存中的地址不同,只要用new总会生成新的对象。
2.对于String s1=“abc”和String s2=“abc”,在JVM中存在一个字符串池,保存多个String对象,并可以被共享使用,s1和s2引用得是同一个常量池中的对象。
可以将String s1=new String(“abc”)分为两个过程,一个是新建对象的过程,即new String(“abc”);第二个是赋值的过程,String s1=。在第二个过程中只定义一个名为s1的String类型的变量,将一个String类型对象引用赋给s1。第一个过程会调用String类的构造函数:
在调用这个构造函数时,传入一个字符串常量,new String(“abc”)与abc和new String相等。如果字符串池不存在“abc”,则会创建一个字符串常量“abc”,并将其添加到字符串池中;若存在,则不创建,然后new String(