马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 moc 于 2018-12-22 22:22 编辑
1、StringBuffer简介
① String 的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低,而且耗费大量内存空间。
② StringBuffer类和String类一样,也用来表示字符串,但是StringBuffer的内部实现方式和String不同,在进行字符串处理时,不生成新的对象,在内存使用上要优于String。
③ StringBuffer 默认分配16字节长度的缓冲区,当字符串超过该大小时,会自动增加缓冲区长度,而不是生成新的对象。
④ StringBuffer不像String,只能通过 new 来创建对象,不支持简写方式。StringBuffer str1 = new StringBuffer(); // 分配16个字节长度的缓冲区
StringBuffer str2 = =new StringBuffer(512); // 分配512个字节长度的缓冲区
// 在缓冲区中存放了字符串,并在后面预留了16个字节长度的空缓冲区
StringBuffer str3 = new StringBuffer("I love fish.com");
2、StringBuffer方法
主要方法:
序号 | 原型 | 说明
| 1 | public StringBuffer append(String s) | 将指定的字符串追加到此字符序列。
| 2 | public StringBuffer reverse() | 将此字符序列用其反转形式取代。
| 3 | public delete(int start, int end) | 移除此序列的子字符串中的字符。
| 4 | public insert(int offset, int i) | 将 int 参数的字符串表示形式插入此序列中。
| 5 | public replace(int start, int end, String str) | 使用给定 String 中的字符替换此序列的子字符串中的字符。 | 与 String 类类似的方法:
序号 | 原型 | 说明
| 1 | int capacity() | 返回当前容量。
| 2 | char charAt(int index) | 返回此序列中指定索引处的 char 值。
| 3 | void ensureCapacity(int minimumCapacity) | 确保容量至少等于指定的最小值。
| 4 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此序列复制到目标字符数组 dst。
| 5 | int indexOf(String str) | 返回第一次出现的指定子字符串在该字符串中的索引。
| 6 | int indexOf(String str, int fromIndex) | 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
| 7 | int lastIndexOf(String str) | 返回最右边出现的指定子字符串在此字符串中的索引。
| 8 | int lastIndexOf(String str, int fromIndex) | 返回 String 对象中子字符串最后出现的位置。
| 9 | int length() | 返回长度(字符数)。
| 10 | void setCharAt(int index, char ch) | 将给定索引处的字符设置为 ch。
| 11 | void setLength(int newLength) | 设置字符序列的长度。
| 12 | CharSequence subSequence(int start, int end) | 返回一个新的字符序列,该字符序列是此序列的子序列。
| 13 | String substring(int start) | 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
| 14 | String substring(int start, int end) | 返回一个新的 String,它包含此序列当前所包含的字符子序列。
| 15 | String toString() | 返回此序列中数据的字符串表示形式 | 3、StringBuilder类
① StringBuilder类和StringBuffer类功能基本相似,方法也差不多,主要区别在于StringBuffer类的方法是多线程安全的,而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。
② StringBuffer、StringBuilder、String中都实现了CharSequence接口。
③ CharSequence是一个定义字符串操作的接口,它只包括length()、charAt(int index)、subSequence(int start, int end) 这几个API。
说明:
① stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbuiler。
② 关于线程安全,即使你真的遇到了这样的场景,很不幸的是,恐怕你仍然有 99.99....99% 的情况下没有必要选择 stringbuffer,因为 stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确。大多数时候,我们需要的不仅仅是线程安全,而是锁。
③ javac jdk1.5 开始,把所有用加号连接的 string 运算都隐式的改写成 stringbuilder。 |