• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Dixon_Liang

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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  阅读(24)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3