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. 二叉查找树、平衡二叉树(AVLTree)、平衡多路查找树(B-Tree),B+树

    B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引. B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的. 在 ...

  2. disruptor架构二

    小故事:Disruptor说的是生产者和消费者的故事. 有一个数组.生产者往里面扔芝麻.消费者从里面捡芝麻. 但是扔芝麻和捡芝麻也要考虑速度的问题. 1 消费者捡的比扔的快 那么消费者要停下来.生产者 ...

  3. MongoDB via Dotnet Core数据映射详解

    用好数据映射,MongoDB via Dotnet Core开发变会成一件超级快乐的事.   一.前言 MongoDB这几年已经成为NoSQL的头部数据库. 由于MongoDB free schema ...

  4. 如何在使用spring boot的时候,去掉使用tomcat

    在spring boot中引入spring-boot-starter-web依赖的时候,不想使用spring boot提供的tomcat怎么办呢? 如下配置则可以解决问题: <dependenc ...

  5. JavaScript基础避免隐式的类型转换(004)

    JavaScript在普通对比运算符“==”执行时可能会进行隐式的类型转换.比如:false==0和""==0的结果都是true.同理也适合于"!="运算符.要 ...

  6. #Google HTML&CSS规范指南

    Google HTML&CSS规范指南 翻译自原文 目录 Google HTML&CSS规范指南 1. 背景 2. 通用 2.1 通用样式规则 2.1.1 协议 2.2 通用格式规则 ...

  7. 【FastDFS】FastDFS 分布式文件系统的安装与使用,看这一篇就够了!!

    写在前面 有不少小伙伴在实际工作中,对于如何存储文件(图片.视频.音频等)没有一个很好的解决思路.都明白不能将文件存储在单台服务器的磁盘上,也知道需要将文件进行副本备份.如果自己手动写文件的副本机制, ...

  8. SpringCloud 断路器之Hystrix

    Hystrix-断路器 在分布式环境中,许多服务依赖项中的一些必然会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互.Hystrix通过隔离服务之间的访问点 ...

  9. JS的一些知识点

    1.介绍一下js的数据类型有哪些,值是如何存储的 JavaScript一共有8种数据类型,其中有7种基本数据类型:Undefined.Null.Boolean.Number.String.Symbol ...

  10. Netty 源码解析(六): Channel 的 register 操作

    原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365篇原创计划”第六篇. 接下来的时间灯塔君持续更新Netty系列一共九篇   Netty 源码解析(一 ):开始 Netty ...