45 java常用类_7 _StringBuffer与StringBuilder
1.可变字符串StringBuffer与StringBuilder
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢(比String快),线程安全 (buffer:缓冲区)
- StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全(单线程选择StringBuilder)
- 和String区别:(1)比String效率高、(2)比String节省内存
- 相当于String增强类
- 方法:
- append();添加
- insert(); 添加,插入,可指定位置 (要注意位置范围0 ~ stringBuffer.length())
- reverse();//反转
- delete(); 删除,有起始与结束下标(含头不含尾)
代码如下:
package com.wlw.common_class.string;
/*
StringBuffer 与 StringBuilder的使用是一样的(**)
*/
public class Demo04 {
public static void main(String[] args) {
//StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();
//1.append();添加
sb.append("java世界第一");
System.out.println(sb);
sb.append("java真香");
System.out.println(sb);
sb.append("java不错");
System.out.println(sb);
System.out.println(sb.length());
//2.insert(); 添加,插入,可指定位置 (要注意位置范围0 ~ stringBuffer.length())
sb.insert(0,"我在最前面");
System.out.println(sb);
System.out.println(sb.length());
sb.insert(sb.length(),"我在最后面");
System.out.println(sb);
System.out.println(sb.length());
//3.replace(); 替换 ,有起始与结束下标(含头不含尾)
sb.replace(0, 5, "hello");
System.out.println(sb.toString());
//反转
sb.reverse();
System.out.println(sb.toString());
//4.delete(); 删除,有起始与结束下标(含头不含尾)
sb.delete(0,5);
System.out.println(sb.toString());
sb.delete(0,sb.length());//清空
System.out.println(sb.length());
}
}
/*
执行结果:
java世界第一
java世界第一java真香
java世界第一java真香java不错
20
我在最前面java世界第一java真香java不错
25
我在最前面java世界第一java真香java不错我在最后面
30
hellojava世界第一java真香java不错我在最后面
面后最在我错不avaj香真avaj一第界世avajolleh
错不avaj香真avaj一第界世avajolleh
0
Process finished with exit code 0
*/
2.StringBuffer是如何实现线程安全的呢?
2.1StringBuffer类中实现的方法:
2.2StringBuilder类中实现的方法:
由此可见,StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。
3.验证 StringBuffer StringBuilder效率高于String:
代码如下:
package com.wlw.common_class.string;
/*
验证 StringBuffer StringBuilder效率高于String
*/
public class Demo05 {
public static void main(String[] args) {
stringTime();
stringBufferTime();
stringBuilderTime();
}
public static void stringTime(){
long start = System.currentTimeMillis();
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}
//System.out.println(s);
long end = System.currentTimeMillis();
System.out.println("String用时:"+(end-start));
}
public static void stringBufferTime(){
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
//System.out.println(sb);
long end = System.currentTimeMillis();
System.out.println("StringBuffer用时:"+(end-start));
}
public static void stringBuilderTime(){
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
//System.out.println(sb.toString());
long end = System.currentTimeMillis();
System.out.println("StringBuilder用时:"+(end-start));
}
}
/*
执行结果:
String用时:352
StringBuffer用时:15
StringBuilder用时:1
*/