String类
String类是引用类型,而不是基础数据类型。
所有双引号括住的都是String类。
所有String类都是在方法区的字符常量池中存储数据,通过new String(“example”);创建的字符串在堆中有一个对象,其内容是一个指向字符常量池中一个指针。
而双引号创建的String类,没有堆中对象,而是直接指向字符常量池。
字符常量池中的值是唯一的,即创建多个相同值的String,指向的都是一个字符常量。
equals方法不能作用与基本数据类型,equals方法是调用的父类Object的equals方法,默认的equals方法比较的是两个值的地址,通过重写equals方法可以实现比较对象的内容而不是地址。
基本数据类型使用==来比较值,而对象比较的是地址。
两个相同值的String类因为指向相同的方法区的常量字符,所以也是相等的。
StringBuffer(字符串缓冲区)
在Java中,String类是final的,一旦创建就无法修改。
我们使用StringBuffer来动态修改字符串,StringBuffer是一个容器,我们对内容的修改都是在同一个StringBuffer内,不会产生新的StringBuffer。
String s=“abc”;
StringBuffer s5=new StringBuffer(s);
stringBuilder的效果和StringBuffer是相同的,只是StringBuilder是线程不安全的,而StringBuffer是线程安全的。