1.string类: 代表字符串。java程序中所有字符串字面值都作为此类的实例实现。
是一个final类,代表不可变的字符序列,不可被继承。
实现了serializable接口,表示字符串是支持序列化的。实现了comparable接口,表示string可以比较大小。
字符串是个常量,用双引号引起来表示。他们的值在创建之后不能更改。
内部定义了final char[] value,string对象的字符内容是存储在该字符数组value[]中。
通过字面量的方式给一个字符串赋值,此时的字符串值声明在字符串常量池(不会存储相同内容的字符串)中。
重新给一个string对象通过字面量赋值,会重新在字符串常量池中生成一个字符串,然后把地址值赋给该对象。
字面量方式和new的区别:
字面量:内容在方法区的字符串常量池中,对象直接指向该字符串对应的地址。
new:先在堆空间中开辟空间,该空间指向方法区内该字符串对应的地址,对象指向堆空间中开辟出来的这个空间地址。
2.stringBuffer和stringBuilder
stringbuffer:可变的字符序列:线程安全的,效率低;底层为char[]
stringbuilder:可变的字符序列;线程不安全的,效率高;底层为char[]