1、简介

StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。StringBuilder的层次结构如下:

StringBuilder类被设计成在不需要多线程安全的情况下替换StringBuffer类的。如果程序中不需要多线程安全,推荐使用StringBuilder类,因为没有了同步的操作而速度上比较快。

StringBuilder和StringBuffer一样,主要的操作有append和insert等。

2、StringBuilder原理

StringBuilder的原理和StringBuffer一样,不同之处在于StringBuilder不需要考虑线程安全。具体的原理参见另一篇StringBuffer详解。

3、常用方法

StringBuilder的常用方法和StringBuffer的一样。列出如下:

(1)构造函数

StringBuilder有四个构造函数:

  • StringBuilder() value内容为空,并设置容量为16个字节;
  • StringBuilder(CharSequece seq)  使用seq初始化,容量在此基础上加16;
  • StringBuilder(int capacity) 设置特定容量;
  • StringBuilder(String str)  使用str初始化,容量str大小的基础上加16;

(2)append方法

由于继承了Appendable接口,所以要实现append方法,StringBuilder类对几乎所有的基本类型都重载了append方法:

  • append(boolean b)
  • append(char c)
  • append(char[] str)
  • append(char[] str,int offset,int len)
  • append(CharSequence s)
  • append(CharSequence s,int start,int end)
  • append(double d)
  • append(float f)
  • append(int i)
  • append(long lng)
  • append(Object obj)
  • append(String str)
  • append(StringBuffer sb)

(3)insert方法

insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:

  • insert(int offser,boolean b)
  • insert(int offset,char c)
  • insert(int offset,char[] str)
  • insert(int index,char[] str,int offset,int len)
  • insert(int dsfOffset,CharSequence s)
  • insert(int dsfOffset,CharSequence s,int start,int end)
  • insert(int offset,double d)
  • insert(int offset,float f)
  • insert(int offset,int i)
  • insert(int offset,long l)
  • insert(int offset,Object obj)
  • insert(int offset,String str)

(4)其它会改变内容的方法

上面的那些方法会增加StringBuilder的内容,还有一些方法可以改变StringBuilder的内容:

  • StringBuilder delete(int start,int end) 删除从start到end(不包含)之间的内容;
  • StringBuilder deleteCharAt(int index) 删除index位置的字符;
  • StringBuilder replace(int start,int end,String str) 用str中的字符替换value中从start到end位置的子序列;
  • StringBuilder reverse() 反转;
  • void setCharAt(int index,char ch) 使用ch替换位置index处的字符;
  • void setLength(int newLength) 可能会改变内容(添加'\0');

(5)其它常用方法

下面这些方法不会改变内容:

  • int capacity() 返回value的大小即容量;
  • int length() 返回内容的大小,即count;
  • char charAt(int index) 返回位置index处的字符;
  • void ensureCapacity(int minimumCapacity) 确保容量至少是minimumCapacity;
  • void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字符到dst;
  • int indexOf(String str) 返回str第一次出现的位置;
  • int indexOf(String str,int fromIndex) 返回从fromIndex开始str第一次出现的位置;
  • int lastIndexOf(String str) 返回str最后出现的位置;
  • int lastIndexOf(String str,int fromIndex) 返回从fromIndex开始最后一次出现str的位置;
  • CharSequence subSequence(int start,int end) 返回字符子序列;
  • String substring(int start) 返回子串;
  • String substring(int start,int end) 返回子串;
  • String toString() 返回value形成的字符串;
  • void trimToSize() 缩小value的容量到真实内容大小;

StringBuilder详解相关推荐

  1. java字符串拼接例子_Java详解【String】+【StringBuilder vs StringBuffer】+【字符串拼接】...

    String详解 注意区分对象和对象的引用 首先来看一下我在jdk中找到的String源代码,这里只截取开头的小小一部分 public final class String implements ja ...

  2. String、StringBuffer与StringBuilder类详解

    目录 一.String简介: 二.String的创建方式: 面试题一:String s = new String("abc");方式创建对象,在内存中创建了几个对象? 四.一个笔试 ...

  3. String详解(intern、StringBuffer、StringBuilder)

    "+"操作符,它执行的加入对原始类型(如int和double),重载对String对象进行操作.'+'两个字符串操作数进行串联. java不考虑让开发者支持运算符重载.在支持运算符 ...

  4. 普歌-码灵团队-System类,StringBuilder类的常用方法详解

    System类,StringBuilder类的常用方法详解(java基础必掌握)java面试必问) System类的介绍: System类中常用方法: 1.System.currentTimeMill ...

  5. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  6. Java源码详解四:String源码分析--openjdk java 11源码

    文章目录 注释 类的继承 数据的存储 构造函数 charAt函数 equals函数 hashCode函数 indexOf函数 intern函数 本系列是Java详解,专栏地址:Java源码分析 Str ...

  7. Spring Boot 配置文件详解

    2019独角兽企业重金招聘Python工程师标准>>> 第二篇 : Spring Boot配置文件详解 文章首发于微信公众号<程序员果果> 地址:https://mp.w ...

  8. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验( ...

  9. Fragment详解之四——管理Fragment(2)

    相关文章: 1.<Fragment详解之一--概述> 2.<Fragment详解之二--基本使用方法> 3.<Fragment详解之三--管理Fragment(1)> ...

最新文章

  1. C# 值类型与引用类型
  2. Docker之Linux Cgroups
  3. nginx proxy_pass末尾神奇的/
  4. 薛定谔的猫——.NET 4.1 中的新基类,开源Preview中
  5. 下运行maven命令_如何在批处理模式下运行 top 命令
  6. pythonfor循环输入_Python之for循环的使用
  7. 11. GD32F103C8T6 入门教程-外部中断
  8. STM32CubeMx配置H7时钟: Frequency searched for is out of range for this vos range
  9. 设置 Web 服务器控件颜色属性 转
  10. logging日志输出模块
  11. WIN10 删除文件 找不到该项目
  12. hdu--4487--dp
  13. 微信PC(windows微信)HOOK
  14. 大数据的应用场景都有哪些(交通篇)
  15. 数据结构及算法之异或
  16. 【T+】畅捷通T+存货档案批量修改存货属性
  17. vue点击事件添加html,vue 中拼接html时添加点击事件
  18. Nginx系列(十六):HTTP Vary机制
  19. 什么是外键约束?外键约束下的多表操作是什么?
  20. 【桂林信息科技学院第一届程序设计大赛】完整题解 C++

热门文章

  1. android horizontalscrollview 动画,Android HorizontalScrollView左右滑动效果
  2. 网上linux实验平台,Linux操作系统实验教程
  3. 中tr不能显示字符_垃圾文本识别中基本操作指南和错误总结,第三部分
  4. linux里hba状态_Windows和Linux系统查看HBA卡wwn号的方法 | 系统之家官网
  5. Linux入门笔记——cat、sort、uniq、wc、head、tail、tee
  6. 力扣两数之和 II - 输入有序数组
  7. julia example_使用Julia中的Example的sign()函数
  8. c++语句switch语句_错误:案例标签不在C中的switch语句内
  9. 第二章 染色热力学理论单元测验
  10. 2560介绍_炒股高手收益翻10倍,只因妙用这一招2560战法,看了都不亏了