Java 常用类——StringBuffer&StringBuilder【可变字符序列】
格物致知_Tony 人气:0一、字符串拼接问题
由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。
Demo:
1 public class StringDemo { 2 public static void main(String[] args) { 3 String s = "Hello"; 4 s += "World"; 5 System.out.println(s); 6 } 7 }
上面这段代码,总共产生了三个字符串,即“Hello”,“world” 和 “HelloWorld”。引用变量 s 首先执行 Hello 对象,最终指向拼接出来的新字符串对象,即 HelloWorld。
由此可见,如果对字符串进行拼接操作,每次拼接,都会构建一个新的 String 对象,既耗时,又浪费空间。为了解决这一问题,可以使用 java.lang.StringBuilder 类。
String类有这样的描述:字符串是常量,它们的值在创建后不能被更改。
由于 String 类不可变,对于频繁操作字符串的操作不方便,JDK为我们提供了可变的字符序列。
二、StringBuffer 类
1、概述
(1)java.lang.StringBuffer 代表可变的字符序列,JDK1.0中声明,可以对字符串内容进行增删,此时不会产生新的对象。
(2)StringBuffer 类中有很多方法与 String 相同;
(3)作为参数传递时,方法内部可以改变值;
(4)类结构:
(5)AbstractStringBuilder 类
2、构造方法
StringBuffer 类不同于 String,其对象必须使用构造器生成。该类有四个构造器:
1 public StringBuffer() { 2 super(16); //初始容量为16的字符串缓冲区 3 } 4 5 public StringBuffer(int capacity) { 6 super(capacity); //构造指定容量的字符串缓冲区 7 } 8 9 public StringBuffer(String str) { 10 super(str.length() + 16); //将内容初始化为指定字符串内容 11 append(str); 12 } 13 14 public StringBuffer(CharSequence seq) { 15 this(seq.length() + 16); 16 append(seq); 17 }
3、常用方法
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() :把当前字符序列逆转 public int indexOf(String str) public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串 public int length() public char charAt(int n ) public void setCharAt(int n ,char ch)
这些方法可以理解为对一个该字符串的增删改查,遍历操作:
增:append(xxx)
删:delete(int start,int end)
改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
查:charAt(int n )
插:insert(int offset, xxx)
长度:length();
遍历:for() + charAt() / toString()
Demo:
1 @Test 2 public void test(){ 3 StringBuffer s1 = new StringBuffer("abc"); 4 s1.append(1); 5 s1.append('1'); 6 System.out.println(s1); 7 // s1.delete(2,4); 8 // s1.replace(2,4,"hello"); 9 // s1.insert(2,false); 10 // s1.reverse(); 11 String s2 = s1.substring(1, 3); 12 System.out.println(s1); 13 System.out.println(s1.length()); 14 System.out.println(s2); 15 }
4、方法链
StringBuffer 类的这些方法支持方法链操作。
方法链的原理:
可以看到,每次操作完之后都会把此对象返回,进而可以接着调用其他本类中方法。
Demo:
1 @Test 2 public void test4() { 3 StringBuffer buffer = new StringBuffer("abc"); 4 5 StringBuffer bufferChange = buffer.append("a").append(1).append(false).reverse(); 6 7 System.out.println(bufferChange); 8 }
5、扩容原理
6、
7、
三、StringBuilder 类
四、
五、
加载全部内容