信誉好的菏泽网站建设,知名室内设计网站,长春自助建站系统,免费图片链接生成器String、StringBuffer、StringBuilder的异同#xff1f; String#xff1a;不可变字符序列#xff1b;底层结构使用char[]存储#xff1b; StringBuffer#xff1a;可变字符序列#xff1b;线程安全的#xff0c;效率低#xff1b;底层结构使用char[]存储#xff1b; …String、StringBuffer、StringBuilder的异同 String不可变字符序列底层结构使用char[]存储 StringBuffer可变字符序列线程安全的效率低底层结构使用char[]存储 StringBuilder可变字符序列JDK5.0新增的线程不安全效率高。底层结构使用char[]存储 StringBuffer源码分析
String
String str new String();//char[] value new char[0] String str1 new String(“abc”);//char[] value new char[]{‘a’,‘b’,‘c’}
StringBuffer
StringBuffer sb1 new StringBuffer();//char[] value new char[16];//底层创建了一个长度为16的数组 StringBuffer sb2 new StringBuffer(“abc”);//char[] value new char[“abc”.length()16]; StringBuffer部分源码 StringBuilder部分源码 StringBuffer和StringBuilder继承了共同的父类 两者的区别是StringBuffer的方法是线程安全的StringBuilder线程不安全。 StringBuffer的扩容问题
如果要添加的数据底层数组盛不下了那就需要扩容底层数组 默认情况下扩容为原来的2倍2同时将原有数组中的元素复制到新的数组中 建议使用StringBuffer(int capacity)构造器:capacity为底层数组的长度。能够避免扩容提高效率。 StringBuffer的常用方法
StringBuffer append(xxx)提供了很多append()用于字符串拼接StringBuffer delete(int start ,int end)删除指定位置的内容StringBuffer replace(int start,int end,String str)把[start,end)位置替换为strStringBuffer insert(int offset,xxx)指定位置插入xxxStringBuffer reverse()把当前字符序列逆转public int indexOf(String str)public String substring返回一个从start开始到end所用结束的子字符串pubic int length()public char charAt(int n)public void setCharAt(int n,char ch)
String、StringBuffer、StringBuilder效率对比
在频繁插入字符时 StringBuilderStringBufferString 其中String效率要远远低于二者。