鱼C论坛

 找回密码
 立即注册
查看: 2325|回复: 1

[学习笔记] Java-015StringBuffer与StringBuider类

[复制链接]
发表于 2018-12-22 22:23:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-12-22 22:22 编辑

1、StringBuffer简介
①  String 的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间。
②  StringBuffer类和String类一样,也用来表示字符串,但是StringBuffer的内部实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String
③  StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。
④  StringBuffer不像String,只能通过 new 来创建对象,不支持简写方式
  1. StringBuffer str1 = new StringBuffer();  // 分配16个字节长度的缓冲区
  2. StringBuffer str2 = =new StringBuffer(512);  // 分配512个字节长度的缓冲区
  3. // 在缓冲区中存放了字符串,并在后面预留了16个字节长度的空缓冲区
  4. StringBuffer str3 = new StringBuffer("I love fish.com");
复制代码
2、StringBuffer方法
主要方法:
序号原型说明
1public StringBuffer append(String s)将指定的字符串追加到此字符序列。
2public StringBuffer reverse() 将此字符序列用其反转形式取代。
3public delete(int start, int end)移除此序列的子字符串中的字符。
4public insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中。
5public replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符。
与 String 类类似的方法:
序号原型说明
1int capacity()返回当前容量。
2char charAt(int index)返回此序列中指定索引处的 char 值。
3void ensureCapacity(int minimumCapacity)确保容量至少等于指定的最小值。
4void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此序列复制到目标字符数组 dst。
5int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引。
6int indexOf(String str, int fromIndex)从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
7int lastIndexOf(String str)返回最右边出现的指定子字符串在此字符串中的索引。
8int lastIndexOf(String str, int fromIndex)返回 String 对象中子字符串最后出现的位置。
9int length() 返回长度(字符数)。
10void setCharAt(int index, char ch)将给定索引处的字符设置为 ch。
11void setLength(int newLength)设置字符序列的长度。
12CharSequence subSequence(int start, int end)返回一个新的字符序列,该字符序列是此序列的子序列。
13String substring(int start)返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
14String substring(int start, int end)返回一个新的 String,它包含此序列当前所包含的字符子序列。
15String toString()返回此序列中数据的字符串表示形式
3、StringBuilder类
①  StringBuilder类和StringBuffer类功能基本相似,方法也差不多,主要区别在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。
②  StringBuffer、StringBuilder、String中都实现了CharSequence接口。
③  CharSequence是一个定义字符串操作的接口,它只包括length()、charAt(int index)、subSequence(int start, int end) 这几个API。
1.PNG

说明:
        ① stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbuiler
        ② 关于线程安全,即使你真的遇到了这样的场景,很不幸的是,恐怕你仍然有 99.99....99% 的情况下没有必要选择 stringbuffer,因为 stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确。大多数时候,我们需要的不仅仅是线程安全,而是锁。
        ③ javac  jdk1.5 开始,把所有用加号连接的 string 运算都隐式的改写成 stringbuilder

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-5 11:09:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-3 00:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表