StringBuffer&StringBuilder

StringBuffer&StringBuilder

StringBuffer

可变的字符序列;线程安全 ,效率低;(JDK8之前的底层使用char[],之后使用byte[]数组)

StringBuilder

可变的字符序列;线程不安全 ,效率高;

源码解析

StringBuilder和StringBuffer继承了abstractStringBuilder
针对于StringBuilder来说
内部属性:
		char[] value;//存储字符序列
		int count;//实际存储字符的个数
StringBuilder sBuffer1 = new StringBuilder();//char[] value = new char[16];
StringBuilder sBuffer1 = new StringBuilder("abc");//char[]  
value = new char[16+"abc".length];

sBuffer1.append("ac");//value[0]='a';value[1]='c';
sBuffer1.append("b");//value[2]='b';
不断的添加,一旦count要超过 value.length时,就需要扩容;默认扩容为原有容量的2倍+2。
Arrays.copyOf()将原有value数组中的元素复制到新的数组中。 

使用方法

  • 如果开发中需要频繁的针对字符串进行增,删,改操作,建议使用StringBuffer或者StringBuilder替换String因为使用String效率低。
  • 如果开发中,不涉及到线程安全问题,建议使用StringBuilder替代StringBuffer;
  • 如果开发中大体确定要操作的字符的个数,建议使用带int capacity参数的构造器。因为可以避免底层扩容操作,性能更高。

StringBuffer和StringBuilder常用方法

	增:
		StringBuffer	append(xx)
	删:
		StringBuffer	delete(int start,int end) [start,end)
		StringBuffer	deleteCharAt(int index)
	改:
		StringBuffer	replace(int start,int end,String str)
		void	setCharAt(int index,char c)
	查:
		char	charAt(int index)
	插:
		StringBuffer	insert(int index,xx)
	长度:
		int	length()
	反转:
		StringBuffer reverse()
	设置底层数组长度:
		setLength(int length)
		new StringBuffer(int length)

对比三者的执行效率

StringBuilder > StringBuffer > String

posted @ 2023-05-01 14:13  YxinHaaa  阅读(2)  评论(0编辑  收藏  举报