String相关
String的基本特征
- String被声明为final,不可被继承。
- String实现了Serializable接口,表明String支持序列化;实现了Comparable接口,表明String是可以比较大小
- jdk8及其以前底层用char数组实现;jdk9以后用byte数组加编码标记(因为比如中文需要用两个byte存储)实现,StringBuilder和StringBuffer也做了相应的更新。
- 字符串常量池不会存储相同内容的字符(底层实现是一个固定长度的hashtable,长度可由-XX:StringTableSize=size设置)。
- jdk7开始,字符串常量池从方法区移到堆中,原因如下:
- String、StrngBuilder、StringBuffer区别
- String底层数组用final修饰,所以不可变;StringBuilder、StringBuffer底层数组可变(可修改)
- StringBuilder线程不安全,但速度比StringBuffer快,StringBuffer线程安全(Synchronized实现线程安全),但速度较慢
- 需要频繁操作修改字符串时建议使用StringBuilder或者StringBuffer
String s1= "abc";
String s2=new String("abc");
System.out.println(s1==s2);
字符串拼接操作
String s1= "a"