StringBuilder 和StringBuffer
package com.changyonglei.StringBuffer; import org.junit.Test; /** * @author Dixon * @create 2022-05-25 9:42 * * * String、StringBuffer. StringBuilder三者的异同? * string:不可变的字符序列;底层使用char[]存储 * stringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储 * StringBuilder:可变的字符序列; jdk5.e新增的,线程不安全的,效率高;底层使用char[]存储 * * * 源码分析: * String str = new String(); //char[] value = new char[e]; * string str1 = new String("abc"); //char[] value = new char[]{ 'a' , ' b', ' c ' }; * * StringBuffer sb1 new StringBuffer(); //char[] value = new char[16];底层创建了一个长度悬是16的数组 * sb1.append( 'a' ); // value[0] = 'a'; * sb1.append( 'b' ); // value[1] = 'b'; * StringBuffer sb2 new StringBuffer("abc"); //char[] value = new char["abc".length() + 16] * * * /问题1.system.out.println(sb2.Length());//3 * //问题2.扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。 * 默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中。 * * * 指导意义:开发中建议大家使用: StringBuffer(int capacity)或 StringBuilder(int capacity) * * * stringBuffer的常用方法: test2() * 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)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() * * 对比String. StringBuffer.StringBuilder三者的效率: * 从高到低排列: StringBuilder > stringBuffer > String * */ public class StringBufferBuilderTest { @Test public void test1(){ StringBuffer sb1 = new StringBuffer("abc"); sb1.setCharAt(0,'m'); System.out.println(sb1); //mbc System.out.println(sb1.length()); } @Test public void test2(){ StringBuffer sb1 = new StringBuffer("abc"); sb1.append(1); sb1.append('1'); System.out.println(sb1); //abc11 // sb1.replace(2,4,"hello"); //replace -->abhello1 // sb1.delete(2,4); delete-->ab1 // sb1.insert(2,false); // abfalsec11 sb1.reverse(); // abfalsec11---> abfalsec11 System.out.println(sb1); System.out.println(sb1.length()); } }
posted on 2022-05-25 15:04 Dixon_Liang 阅读(13) 评论(0) 编辑 收藏 举报