StringBuffer类和StringBuilder类
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类的更多相关文章
- StringBuffer类 和 StringBuilder类
上一篇中讲解了String类的用法.那么String有什么特点呢? 字符串特点:字符串是常量,其值在创建后就不能被修改.字符串的内容一旦发生变化,就会创建一个新的对象. 代码验证字符串特点: publ ...
- Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)
1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...
- Java基础-StringBuffer类与StringBuilder类简介
Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...
- 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照
本文主要介绍String类.StringBuffer类.StringBuilder类的差别 : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作 ...
- string类和stringBuilder类
字符串是C#中的一种重要数据类型,在项目开发中,离不开字符串操作.C#提供了string类实现字符串操作.于Convert类相似,string类中方法有静态方法和非静态方法.注意,在C#中String ...
- java中String类、StringBuilder类和StringBuffer类详解
本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...
- String类、StringBuilder类、StringBuffer类
String类是不可变类,创建了一个String对象后,该String对象中的字符序列不能被改变. StringBuilder是字符序列可变的字符串类,提供了一系列修改字符串的方法. StringBu ...
- java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类
1.String类 1.1String类的概念和储存结构: (1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象 String s1 = new String(&quo ...
- StringBuffer类、StringBuilder类详解
StringBuffer是一个字符串缓冲区,是一个容器,而且长度可变,可以直接操作多个数据类型, 最终会通过toString()方法变成字符串. 容器的功能有: 1.存储 public StringB ...
随机推荐
- 观察者模式(Observer Pattern)(二):HeadFirst中的气象站的实现
1 观察者模式的原理,首先由一个主题,当主题发送变化的时候,通知该主题的订阅者 按照上面的分析我们来进行设计 1.抽象主题Subject public interface Subject { publ ...
- C++的逗号运算符
逗号运算符( , )是C++语言运算符中优先级最低的一种运算符,结合顺序是从左至右,用来顺序求值(最后一个逗号后面表达式的值作为整个表达式的值). 感觉这个东西还是挺冷门的,之前都不知道,平时也比较少 ...
- zookeeper 伪集群安装和 zkui管理UI配置
#=======================[VM机器,二进制安装] # 安装环境# OS System = Linux CNT7XZKPD02 4.4.190-1.el7.elrepo.x86_ ...
- 浅谈dfs
搜索(dfs) 搜索分为bfs与dfs 他们的算法思路都是相同的--穷举 可以说,搜索是万能的,但是复杂度往往是指数级的,往往是穷途末路才用的最后方案 dfs dfs核心操作:回溯+前进 想想你第一次 ...
- 洛谷 P1025 【数的划分】
进入正题 思路:递归 这道题有点像放苹果: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 转化一下就有: 把n个苹果放在k个 ...
- Linux中more和less的区别
more的源码量大约2000行: less的源码量大约27000行: more历史比less久: less功能比more多: 其实本质没啥太大区别,都是为了查看文件方便. (完)
- 在linux上安装jdk(转载)
软件环境: 虚拟机:VMware Workstation 10 操作系统:Ubuntu-12.04-desktop-amd64 JAVA版本:jdk-7u55-linux-x64 软件下载地址: JD ...
- css条纹背景样式、及方格斜纹背景的实现
一.横向条纹如下代码: background: linear-gradient(#fb3 %, #58a %) 上面代码表示整个图片的上部分20%和下部分20%是对应的纯色,只有中间的部分是渐变色.如 ...
- 神奇的建图方式(Tarjan)——小z玩游戏
原题来自与:洛谷 P5676(GZOI2017) 链接: https://www.luogu.com.cn/problem/P5676 题面: 题意比较明显,如果已经建好了边,那么跑个Tarjan ...
- 数学计算 LibreOJ - 2573
题目描述 小豆现在有一个数 x ,初始值为 1 . 小豆有 Q 次操作,操作有两种类型: 1 m: x=x×m ,输出 xmodM : 2 pos: x=x/ 第 pos 次操作所乘的数(保证第 po ...