1.string类是final类,也就意味着string类不能被继承,并且它的成员方法都默认为final方法,在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法
2.string类其实是通过char数组来保存字符串的
3.无论是substring,cancat,还是replace在操作时都不是在原字符串上进行操作,而是重新创建一个新的字符串对象,也就是说进行这些操作之后,原字符串并没有被改变
永远要记住一点;string对象一旦被创建就是固定不变的了,对string对象的任何改变都不影响到原对象,相关的任何change操作都会生成一个新的对象
4.string类初始化后是不可变的
string使用private final char value[ ]来实现字符串的存储,也就是说string对象被创建之后,就不能修改此字符串中存储的字符串内容,就是因为如此,才说string类是不可变的
5.创建字符串的方式有两种
第一种:使用“”号创建string x="y"; 此种不一定被创建,可能是引用了字符串池中的对象
第二种:使用new关键字来创建string x=new string(“y”); 此种一定被创建
第一种:使用引号创建的字符串都是常量,编译器就已经确定存储到string pool(字符串池)中
第二种:使用new string(“”)创建的对象会存储到heap(堆栈)中,是运行时期创建的;
new 创建字符串时首先会查看字符串池中是否存在相同值的字符串,如果有,直接将其拷贝一份到堆中,然后返回堆中的地址;如果池中没有,则在堆中创建一份,然后返回堆中的地址,(注意:此时不需要从堆中复制到池中,否则将使得堆中字符串永远是池中的子集,导致浪费池的空间)
==比较的是内容跟地址
equals比较的是内容