StringBuffer类和StringBuilder类

三者比较

String

  • 不可变字符序列
  • 底层用char[]存储

StringBuffer

  • 可变的字符序列
  • 线程安全的
  • 效率低
  • 底层结构使用char[]存储
  • 扩容问题
    • 如果要添加的底层数组盛不下,需要扩容底层的数组
    • 默认情况下扩容为原来容量的2倍 + 2 ,同时将原有的数组元素复制到新的数组中

StringBuilder

  • 可变的字符序列
  • 线程不安全
  • 效率高
  • 源码分析
    • 和StringBuffer源码一样,只是线程不安全了而已

三者效率比较

StringBuilder > StringBuffer > String

StringBuffer类

分析

  • StringBuffer stringBuffer = new StringBuffer();

    • 在底层创建了一个长度为16的数组:

      char[] value = new char[16]

    • 添加数据后:

      stringBuffer.append('a');

      • 其底层为:value[0] = 'a';

    底层代码如图

  • StringBuffer stringBuffer = new StringBuffer("abc");

    此时底层:

    char[] value = new char["abc".length + 16]

常用方法

  • str1.append():用于字符串拼接

  • str1.delete(start,end):删除指定位置的内容(被删除的内容左闭右开)

  • str1.replace(start,end,str):把[start,end]位置替换成str(左闭右开)

  • str1.insert(offset,b):在指定位置插入XXX(插入不是替换,只是位置后移)

  • str1.reverse():当前字符串序列逆转

  • str1.indexOf(str):返回str在当前字符串首次出现的位置

  • str1.substring(start, end):返回从strat开始到end索引结束的左闭右开区间的子字符串

StringBuilder类

  • 底层源码和StringBuffer源码一样,只是线程不安全了而已
  • 常用的方法与StringBuffer相同,String一些方法也可以使用(可总结为增删改查插)
    • 增

      append(XXX)

    • 删

      delect(int start,int end)

    • 改

      setCharAt(int n,char ch)--------修改一个字符

      replace(int start,int end,String str)-------修改换成一个新的字符串

    • 查

      charAt(int n)

    • 插

      insert(int offset,XXX)

    • 长度

      length

StringBuilder(StringBuffer)与String之间的数据转换

StringBuilder/StringBuffer---->String转换

  • toString()方法

  • 通过String类中的构造将一个StringBuffer类转换为String类

String---->StringBuilder/StringBuffer转换

  • 利用构造函数

  • 调用append方法

StringBuffer类和StringBuilder类的更多相关文章

  1. StringBuffer类 和 StringBuilder类

    上一篇中讲解了String类的用法.那么String有什么特点呢? 字符串特点:字符串是常量,其值在创建后就不能被修改.字符串的内容一旦发生变化,就会创建一个新的对象. 代码验证字符串特点: publ ...

  2. Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)

    1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...

  3. Java基础-StringBuffer类与StringBuilder类简介

    Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...

  4. 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照

    本文主要介绍String类.StringBuffer类.StringBuilder类的差别  : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作 ...

  5. string类和stringBuilder类

    字符串是C#中的一种重要数据类型,在项目开发中,离不开字符串操作.C#提供了string类实现字符串操作.于Convert类相似,string类中方法有静态方法和非静态方法.注意,在C#中String ...

  6. java中String类、StringBuilder类和StringBuffer类详解

    本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html  版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...

  7. String类、StringBuilder类、StringBuffer类

    String类是不可变类,创建了一个String对象后,该String对象中的字符序列不能被改变. StringBuilder是字符序列可变的字符串类,提供了一系列修改字符串的方法. StringBu ...

  8. java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类

    1.String类 1.1String类的概念和储存结构: (1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象 String s1 = new String(&quo ...

  9. StringBuffer类、StringBuilder类详解

    StringBuffer是一个字符串缓冲区,是一个容器,而且长度可变,可以直接操作多个数据类型, 最终会通过toString()方法变成字符串. 容器的功能有: 1.存储 public StringB ...

随机推荐

  1. 彻底搞懂Redis主从复制原理及实战

    欢迎关注公众号:「码农富哥」,致力于分享后端技术 (高并发架构,分布式集群系统,消息队列中间件,网络,微服务,Linux, TCP/IP, HTTP, MySQL, Redis), Python 等 ...

  2. ubuntu无法安装vim、tree等解决办法

    rm /etc/apt/sources.list.d/* 删除该目录下所有文件

  3. 请写出在ASP.NET中常用的几种页面间传值的方法,并说出它们的特点。

    QueryString 传递一个或多个安全性要求不高或是结构简单的数值.但是对于传递数组或对象的话,就不能用这个方法了 session(viewstate) 简单,但易丢失 作用于用户个人,过量的存储 ...

  4. Pycharm连接MySQL后出现不出现数据库或表,出现其他文件的问题

    在使用pycharm连接MySQL,配置完成,测试连接通过之后,还是不能显示数据库中的表,出现了许多像armscii8_bin.armscii8_general_ci和ascii_bin等的文件. 解 ...

  5. Nginx功能详细介绍(大而全)

    Nginx介绍 Nginx是C语言开发的. HTTP和反向代理Web服务器. Nginx ⼜能做什么事情(应⽤场景) Http服务器(Web服务器) 性能⾮常⾼,⾮常注重效率,能够经受⾼负载的考验. ...

  6. 利用Chrome浏览器调试线上代码

    前言 之前调试前端bug都是在开发环境中做完并多次测试没有问题之后发布测试环境,验收合格之后发布生产.但生产环境偏偏会有和开发和测试环境不一致的情况,例如测试环境需要加密,而开发环境先不加密,测试环境 ...

  7. 「疫期集训day12」阴雨

    我们走进了泥泞的雨林----阿尔贡森林里艰难前进的士兵 今天考试一般,T1T2签到题没啥好说的,剩下三个小时全肛T3(我脑子有泡,前几天刚做了一道类似T4的难题,公式更难推),9:00->10: ...

  8. 一口气说出 OAuth2.0 的四种鉴权方式,面试官会高看一眼

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 上周我的自研开源项目开始破土动工了,<开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石 > , ...

  9. 使用CodeMirror插件遇到的问题

    CodeMirror的正常使用: //首先通过<script>标签引入相应的js,这个就不必说了 var myCodeMirror = CodeMirror.fromTextArea(my ...

  10. Qt-文件系统

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=45 参考文档:<Qt教程.docx> 说明:本文主要介绍Qt的文件系统. ...