Java基础-StringBuffer、StringBuilder
Table of Contents generated with DocToc (opens new window)
# StringBuffer、StringBuilder
# String、 StringBuffer、 stringBuiLder三者的异同
String:不可变的字符序列;底层使用final char[]数组实现
stringBuffer:可变的字符序列;线程安全的;效率低;底层使用可变char[]数组实现
StringBuilder(jdk5.0新增):可变的字符序列;线程不安全;效率高底层使用可变char[]数组
# StringBuilder源码分析
String str1 = new String("abc"); //char[] value = new char[]{ 'a' , 'b', ' c' };
StringBuffer sb1 = new StringBuffer();//char[] value = new char[16];底层创建了一个长度system.out.printLn(sb1.Length());//
sb1.append( 'a' ); //value[e] = 'a';sb1.append( ' b' ); l /value[1] = "b ';
StringBuffer sb2 = new StringBuffer("abc"); //char[] value = new char["abc".Length()+16]
//问题1.System.out.printLn(sb2.Length());/1/3
//问题2.扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。
//默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。
//指导意义:开发中建议大家使用: StringBuffer(int capacity)或StringBuilder(int capacity)来避免频繁扩容
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# StringBuffer类的常用方法(StringBuilder类似)
StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer insert(int offset,xxx):在指定位置插入xXX
StringBuffer reverse():把当前字符序列逆转
1.当append和insert时,如果原来value数组长度不够,可扩容。 2.如上这些方法支持方法链操作。 3.方法链的原理: @override public Stringeuilder append(string str) { super.append(str); return this; }
1
2
3
4
5
6
7
8public int indexOf(String str)
public String subString(int start,int end)
public int length()
public char charAt(int n )
public void setCharAt(int n ,char ch)
# 效率对比:String<StringBuffer<StringBuilder
在 GitHub 上编辑此页 (opens new window)
最后更新: 2022/10/04, 16:10:00