1.可变与不可变
String源码是final修饰的,所以是存储在不可变区域,即存在字符串常量区 String s=new String();或者静态区String s="faffds",StringBulider与StringBuffer都是可变的,一般涉及到字符串操作的时候用后者。
2.是否多线程安全
String中的对象是不可变的,也就可以理解为常量,显然线程安全,StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder与StringBuffer有公共父类AbstractStringBuilder(abstract类)。
3.StringBulider常用API
1) public StringBuilder append(String str) 尾部新增字符串,在原来的基础上扩容。
2) public StringBuilder insert(int offset, String str) 在某个位置插入,也是原基础上扩容,但是一定要用在已经完整的字符串,而不是动态插入。
3) public StringBuilder replace(int start, int end, String str) 比如We Are start=2,end=3,str="%20" 结果为We%20Are
4)public StringBuilder reverse() 顾名思义
5)public String toString() 故名思意 比较常用
6)public StringBuilder delete(int start, int end) 不包含最后一个
7)public void (int newLength)
8) charAt(int k);setCharAt(int,char);
4.String常用API
substring,equals,compareTo(string),public char[] toCharArray();
推荐查看源码网站http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25