package com.atguigu.java;
import org.junit.Test;
/**
* String、StringBuffer、StringBuilder三者的异同?
* String:不可变的字符序列;底层使用char[]存储
* StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
* StringBuilder:可变的字符序列;jdk5.0新增,线程不安全,效率高;底层使用char[]存储
* <p>
* 源码分析:
* String str = new String();//char[] value = new char[0];
* String str = new String("abc");//char[] value = new char[]{'a', 'b', 'c'};
* <p>
* StringBuffer sb = new StringBuffer()//char[] value = new char[16];底层创建了一个长度为16的char型数组
* sb.append('a');//value[0] = 'a';
* sb.append('b');//value[1] = 'b';
* <p>
* StringBuffer sb = new StringBuffer("abc");//char[] value = new char["abc".length + 16];
* <p>
* 扩容问题:如果要添加的数据底层数据盛不下了,就需要扩充底层的数组
* 默认情况下,扩容为原来容量的2倍 + 2,同时将原有数组的元素复制到新的数组中
*/
public class StringBufferBuilder {
/**
* StringBuffer常用方法
* StringBuffer append(xxx):提供了多种append()方法,可以直接填入多种数据类型
* StringBuffer delete(int start, int end):删除
* StringBuffer replace(int start, int end, String str):(start, end] 替换
* StringBuffer insert(int offset, xxx):从offset索引插入
* StringBuffer reverse():反转
*
*
*/
@Test
public void Test1(){
StringBuffer sb1 = new StringBuffer("abcde");
sb1.append(1);
// sb1.delete(0, 2);
// sb1.replace(0, 2, "Iam");
sb1.insert(2, false);
sb1.reverse();
System.out.println(sb1);
}
/**
* StringBuffer:
*
* public int indexOf():
* public String substring(int start, int end):返回(start, end]的一个子串
* public int length():
* public char charAt():
* public void setCharAt(int n, char ch):
*
*/
@Test
public void test2(){
StringBuffer sb1 = new StringBuffer("abcde");
String s1 = sb1.substring(3);
System.out.println(s1);
}
}
StringBuffer StringBuilder常用方法
最新推荐文章于 2022-10-26 22:14:35 发布