StringBuffer类与StringBuilder类
在没有遇到它前,你会认为String类NB,但学完StringBuffer和StringBuilder后,你会发现:“是我自作多情了”。(不过String类确实挺NB的)
由于String的特性:内容一旦声明则不可改变,如果要改变,改变的肯定是String的引用地址。那么如果一个字符串要经常改变,此时使用String就不太合适,从而使用StringBuffer或StringBuilder更好。
区别
与String的区别
- 效率比String高
- 比String节省内存。
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文档。
实例
常用方法实例
public class Main3 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello");//追加类似String中的”+“
System.out.println(sb);
sb.append("Hello");
sb.insert(5, " world ");//在第5个位置后添加字符串”world“
System.out.println(sb.toString());//将StringBuffer转为String类型并打印
sb.reverse();//将字符串反转
System.out.println("反转:" + sb.toString());
sb.delete(0, 5);//删除从第1个字符开始到第5个,包括开头不包括结尾
System.out.println(sb.toString());
}
}
运行结果
比较三者效率实例
public class Main {
public static void main(String[] args) {
String str = "";
long begin = System.currentTimeMillis();
for (int i = 0; i < 99999; i++) {
str += i;
}
long end = System.currentTimeMillis();
System.out.println("String用时:" + (end - begin));
StringBuffer str2 = new StringBuffer();
long begin2 = System.currentTimeMillis();
for (int i = 0; i < 9999999; i++) {
str2.append(i);
}
long end2 = System.currentTimeMillis();
System.out.println("StringBuffer用时:" + (end2 - begin2));
StringBuilder str3 = new StringBuilder();
long begin3 = System.currentTimeMillis();
for (int i = 0; i < 9999999; i++) {
str3.append(i);
}
long end3 = System.currentTimeMillis();
System.out.println("StringBuilder用时:" + (end3 - begin3));
}
}
运行结果:
注意:这里String只循环了99999次,而其他两个为9999999次,单位为ms
总结
- 从上面的实例可以看出在一个字符串经常被更改的情况下,使用StringBuffer或StringBuilder能够大大的提高效率。
- 由于StringBuffer和StringBuilder在使用上没有什么太大区别,所以演示较少。
学完之后,在字符串操作上,你会如虎添翼,操作更加犀利。