StringBuffer和StringBuilder 非常类似,均代表可变的字符序列。这两个类都是抽象类的,方法一模一样
StringBuffer线程安全,做线程同步检查,效率低
StringBuilder线程不安全,不做线程同步检查,效率较高,建议使用该类
StringBuilder的使用
速度对比:
package oop2.demo06;
public class StringF {
public static void main(String[] args) {
String str = "bnu";
StringBuilder builder = new StringBuilder();
long l = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
//str = str.concat("sxt");
//builder.append("sxt");
}
long l1 = System.currentTimeMillis();
System.out.println(l1-l); //查看运行的时间,用以对比StringBuilder 和String运行的速度
}
}
一些常用方法:
package oop2.demo06;
public class StringG {
public static void main(String[] args) {
//String s = "bnu";
StringBuilder builder = new StringBuilder("bnu");
builder.append("北京师范大学"); //内容追加的方法 ,常用。
builder.insert(0,"BNU"); //指定的位置插入字符串。数组下标从0开始
char c = builder.charAt(2); //取出指定下标字符
builder.setCharAt(3,'J'); //设置指定位置的的字符
builder.replace(0,4,"北师大"); //进行指定位置的字符替换 [0,4)
builder.deleteCharAt(3); //删除指定位置字符
builder.delete(1,3); //删除多个字符 [1, 3)
builder.reverse(); //倒序输出字符串
System.out.println(builder);
System.out.println(c);
//String类型与 StringBuilder类 互转
String str = "bnu";
StringBuilder stringBuilder = new StringBuilder(str);
String s = stringBuilder.toString();
}
}
一些面试题
StringBuilder 底层默认char数组长度为16
StringBuilder 底层的扩容机制 是 : 原有的数组长度*2+2
package oop2.demo06;
public class StringL {
public static void main(String[] args) {
String str = "abcd";
String a = "a";
String b = "b";
String c = "c";
String d = "d";
//字符串拼接的时候,如果全部是常量 ,和直接写一个结果的含义是一样的
String str2 = "a" + "b" + "c" + "d"; //创建了几个对象? 1个
String str3 = a+b+c+d; //创建了1个对象
//只要含有变量的连接,采用的就是优化的机制:
StringBuilder builder = new StringBuilder();
builder.append(a);
builder.append(b);
builder.append(c);
builder.append(d);
System.out.println(str==str2); //true
System.out.println(str2==str3); //false
}
}
原创文章:https://www.qqhhs.com,作者:起航®,如若转载,请注明出处:https://www.qqhhs.com/53.html
版权声明:本站提供的一切软件、教程和内容信息仅限用于学习和研究目的,请于下载的24小时内删除;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!