概述:
- String 特性:内容一旦声明则 不可改变,如果要改变,改变的是 String 的 引用地址。
- 如果一个字符串要经常改变,使用 String 不太合适,使用 StringBuffer 或 StringBuilder 更好。
区别
与 String 的区别
- 效率比 String 高;
- 比 String 节省内存;
- 没有字符串缓冲区,初始容量为 16 个字符。
StringBuffer 与 StringBuilder 的区别
- StringBuffer:可变长字符串,JDK1.0 提供,相较与 StringBuilder 效率较慢、线程安全。(建议多线程)
- StringBuilder:可变长字符串,JDK5.0 提供,运行效率快、线程不安全。(建议单线程)
- 总体的用法上没有太大差别,如果是 单线程用 StringBuilder 效率更高,多线程使用 StringBuffer 更安全。
常用方法:
方法 | 描述 |
---|---|
append(String str) |
在 StringBuffer 中提供了大量的追加操作(与 String 中使用的 "+" 类似) |
insert(int offset,String str) |
在指定位置处加上指定字符串 |
reverse() |
将内容反转保存 |
replace(int start,int end,String str) |
指定内容替换 |
lenth() |
字符串的长度 |
delete(int start,int end) |
删除指定范围的字符串 |
toString() |
Object 类继承的方法,用于将内容变为 String 类型 |
-
StringBuilder、StringBuffer 支持的方法大部分与 String 类似,更多方法:查看相关API文档。
-
实例
package com.base.demo04;
public class Test08 {
public static void main(String[] args) {
// StringBuffer 和 StringBuilder 用法一致
StringBuffer sb = new StringBuffer();
// 1.append(); 追加字符串
sb.append("HELLO");
System.out.println(sb);
// 2.insert(int offset,String str); 指定位置插入字符串
// 在第5个位置插入,下标从0开始,越界会异常
System.out.println(sb.insert(5, " World!"));
// 3.replace(int start,int end,String str); 指定位置内容替换 (左闭右开)
sb.replace(0,5,"Hello");
System.out.println(sb);
// 4.delete(int start,int end); 删除指定位置字符串 (左闭右开)
sb.delete(5,9);
// sb.delete(0,sb.length()); 清空
System.out.println(sb);
// 5. reverse(); 将字符串反转
System.out.println(sb.reverse());
// 6.toString(); 将内容转换为 String 类型
System.out.println(sb.getClass());
System.out.println("======= toString后 ======");
System.out.println(sb.toString().getClass());
}
}
- 运行结果
- 三者效率对比
package com.base.demo04;
public class Test09 {
public static void main(String[] args) {
// 运行效率对比
// 1.String
String str = "";
long start = System.currentTimeMillis(); // 开始时间
for (int i = 0; i < 99999; i++) {
str += i; // 字符串拼接
}
long end = System.currentTimeMillis(); // 结束时间
System.out.println("String用时:" + (end - start));
// 2.StringBuffer
StringBuffer sb = new StringBuffer();
long start1 = System.currentTimeMillis(); // 开始时间
for (int i = 0; i < 99999; i++) {
sb.append(i); // 字符串拼接
}
long end1 = System.currentTimeMillis(); // 结束时间
System.out.println("StringBuffer用时:" + (end1 - start1));
// 3.StringBuilder
StringBuilder sb2 = new StringBuilder();
long start2 = System.currentTimeMillis(); // 开始时间
for (int i = 0; i < 99999; i++) {
sb2.append(i); // 字符串拼接
}
long end2 = System.currentTimeMillis(); // 结束时间
System.out.println("StringBuilder用时:" + (end2 - start2));
}
}
- 运行结果:单位为 ms
总结:
- 在字符串经常被更改的情况下,使用 StringBuffer 或 StringBuilder 能够大大的提高效率
网友评论