首页 > 编程语言 >【Java】StringBuffer和StringBuilder

【Java】StringBuffer和StringBuilder

时间:2022-11-23 09:35:48浏览次数:59  
标签:Java String int StringBuffer char StringBuilder new

1.String、StringBuffer、StringBuilder三者对比

底层都使用char[]数组存储数据。

  • String:不可变的字符序列。
  • StringBuffer:可变的字符序列,线程安全的,效率低。
  • Stringbuilder:可变的字符序列,jdk5.0新增的,线程不安全的,效率高。

2.内存解析

注释对应底层创建的char[]数组。

String string = new String();   //char[] value = new char[0];
String abc = new String("abc"); //char[] value = new char[]{'a','b','c'};

StringBuffer sb = new StringBuffer();   //char[] value = new char[16]; 底层创建了一个长度是16的数组

StringBuffer sb2 = new StringBuffer("abc"); //char[] value = new char["abc".length()+16];
System.out.println(sb2.length());   //3

如果添加的数据底层数据盛不下了,那就需要扩容底层的数组。
默认情况下,扩容为原来容量的2倍+2,同时将原数组中的元素复制到新数组中。

开发中建议使用:StringBuffer(int capacity)或StringBuilder(int capacity)

3.string、StringBuffer、StringBuilder三者的执行效率

从高到低:StringBuilder > StringBuffer > String

4.StringBuffer、StringBuilder中的常用方法

  • 增: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()

String类和StringBuffer类都用final修饰,为什么Stringbuffer是可变的?

参考链接:
1.StringBuffer是可变的还是不可变的?
2.StringBuffer和StringBuilder的区别

标签:Java,String,int,StringBuffer,char,StringBuilder,new
From: https://www.cnblogs.com/zhishu/p/16916157.html

相关文章

  • Java开发岗位职责【杭州多测师】【杭州多测师_王sir】
    上海公司内部岗位-世纪大道线下面试学历:2019年或之前毕业的统招学信网可查JD(职位描述):3年以上JAVA开发经验,大型互联网行业工作经验优先;(必须有一年实际开发经验)精通JAVA......
  • Java 内部类有坑。。100 % 内存泄露!
    来源:https://knife.blog.csdn.net/article/details/124946774今天给大家分享一种,Java内部类使用不当导致的内存泄露问题,最终导致内存溢出!希望能够帮助到大家!简介「说明......
  • java enum 对标 .net 的enum [Flags]
    一、前景在C#中的枚举中我们使用[Flags]来对枚举进行|(与)运算,比如这样:DemoEnumdemoEnum=DemoEnum.One|DemoEnum.Two;然后我们在使用的过程中,可以对demoEnum.HasF......
  • Java.11.22
    一.while循环1.while是最基本的循环,它的结构为:while(布尔表达式){//循环内容}2.只要布尔表达式为true,循环就会一直执行下去。3.我们大多数......
  • java int转byte数组
    int转byte[]低字节在前(低字节序)publicstaticbyte[]toLH(intn){byte[]b=newbyte[4];b[0]=(byte)(n&0xff);b[1]=(byte)(n>>8&0xff);......
  • 安卓开发 java控制UI
      创建布局管理器对象  设置背景  设置活动界面 按钮事件   按钮显示......
  • 力扣34(java)-在排序数组中查找元素的第一个和最后一个位置(中等)
    题目:给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回 [-1,-1]......
  • Head First Java 读书笔记 17章
    第17章:包、jar存档文件和部署(发布程序)Java程序,是由一组类所组成的,这就是开发过程的输出。本章将讨论如何组织、包装和部署Java程序。如何组织Java代码文件?组织代码文件......
  • Head First Java 读书笔记 16章
    有哪些常用的集合?ArrayListTreeSet以有序状态保存并可防止数据重复HashMap以键值对的形式保存数据LinkedList针对经常插入或删除中间元素所设计的高效率集合HashSe......
  • 随机打乱数组--java实现
    参考链接听说过java.utils.Random随机数是伪随机,但是Math库还没学,所以下面代码中还是用的Randompublicstaticint[]shuffle(int[]arr){Randomr=newRandom(......