Java常用类04:StringBuffer、StringBuilder类
StringBuffer,可变长字符串类,线程安全高,运行效率慢,适用于多线程
StringBuilder,可变长字符串类,运行效率快,线程不安全,适用于单线程
二者都比String类运行效率高,也更节省内存,采用独有的append()和insert()方法添加元素,不能使用+字符串拼接
append()、insert()、replace()、delete()、reverse()方法
public class Hello {
public static void main(String[] args) {
StringBuilder str = new StringBuilder(); //StringBuffer类的方法完全一样
str.append("语言"); //append()方法追加,不能用+拼接
str.insert(0, "java"); //insert()方法在指定位置插入
System.out.println(str); //java语言,可以看到StringBuffer是直接修改源字符串的,不需要重新赋值
String a = "java语言";
System.out.println(str.toString() == a); //false,StringBuffer类重写了toString()方法,将其转换成一个新的String对象而不是常量池,因此和普通String是不一样的
System.out.println(str.toString().equals(a)); //true
str.replace(0, 2, "Ja"); //replace()方法在指定范围进行替换
System.out.println(str); //Java语言
str.setCharAt(0, 'j'); //setCharAt()方法将指定位置字符进行替换
str.delete(4, str.length()); //delete()方法将指定范围删除
System.out.println(str); //java
str.deleteCharAt(3); //deleteCharAt()方法删除指定位置的字符
System.out.println(str); //jav
str.reverse(); //reverse()方法反转字符串
System.out.println(str);
}
}
目前toString()方法用处总结:
- Object类用来返回对象的字符串表示,一般会重写该方法自定义打印的内容
- Arrays类继承Object,用来将数组转换为字符串打印,Arrays.toString(args)
- Exception类继承Object,在自定义异常类时重写toString()方法,打印异常信息
- StringBuffer和StringBuilder类继承Object,将其转换成一个新的String对象而不是常量池,因此和普通String是不一样的
charAt()、indexOf()、length()、substring()
其他一些常用的方法和String类一样
注意要先用toString()方法转换成字符串,才能使用toCharArray()方法转换成字符数组
验证运行效率
public class Hello {
public static void main(String[] args) {
String s1 = "";
StringBuffer s2 = new StringBuffer();
StringBuilder s3 = new StringBuilder();
//System类的currentTimeMillis()方法返回1970年1月1日至今过去的毫秒数
long start = System.currentTimeMillis();
for (int i = 0; i < 99999; i++) { //21000毫秒
s1 += i;
}
// for (int i = 0; i < 99999; i++) { //8毫秒
// s2.append(i);
// }
// for (int i = 0; i < 99999; i++) { //6毫秒
// s3.append(i);
// }
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "毫秒");
}
}