简单介绍
1.String是final类,不允许被继承,方法里通过每次返回一个新对象保证不变性,底层是用char数组实现,实现Serializable, Comparable<String>, CharSequence
注:intern方法是个native方法,它不会新建一个字符串对象,如果常量池有这个对象,直接返回这个对象;如果没有,则把字符串加入常量池,再返回这个对象。所以"123"=="123".intern是true,它们指向 同一个对象
2.StringBuffer是final类,底层是个数组,初始化不指定大小,默认大小16,靠synchronized关键字来保证线程安全
3.StringBuilder是final类,底层是个数组,初始化不指定大小,默认大小16,线程不安全
StringBuffer与StringBuilder
同
都继承了AbstractStringBuilder,除了readObject和writeObject有自己实现外,其他方法调用了父类的方法的
异
各自实现了自己的readObject和writeObject方法,StringBuffer靠synchronized保证线程安全,方法前加个synchronized修饰,StringBuilder则没有
StringBuilder和StringBuffer主要方法
append方法:对原有字符串追加。底层调用System.arraycopy方法,其作用是新建一个数组,把原有字符数组的内容拷贝进来,再把新增内容添加进来。System.arraycopy是个native方法。