大家好,又见面了,我是你们的朋友全栈君。
String:字符串常量
StringBuffer:字符串变量(多线程情况下使用,保护线程安全)
synchronized: 保护线程安全的
StringBuilder:字符串变量(单线程情况下使用)
String、StringBuffer、StringBuilder的主要区别:
1.String类的内容不可以修改,而StringBuffer和StringBuilder的内容可以修改;
2.StringBuffer和StringBuilder的大部分功能都是相似的;
3.StringBuffer采用线程同步处理,属于线程安全操作,而StringBuilder未采用线程同步处理,属于线程不安全操作.
String、StringBuffer和StringBuilder的拼接效率对比
在Java中,需要避免直接对String类对象进行修改,因为String类是不能被修改的,所有的修改都会创建新的对象,效率非常低下.
例如下列代码:
public class TestDemo {
public static void main(String[] args) {
String s = "Hello";
s += "CSDN";
System.out.println(s);
}
}
通过查看字节码,可以发现String的拼接,底层会被优化为StringBuilder对象,使用append方法进行拼接.
运行效率的对比
public class TestDemo {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String s = "";
for(int i = 0; i < 10000; ++i){
s += i;
}
long end=System.currentTimeMillis();
System.out.println(end-start);
start = System.currentTimeMillis();
StringBuffer sbf=new StringBuffer("");
for (int i = 0; i < 10000; i++) {
sbf.append(i);
}
end=System.currentTimeMillis();
System.out.println(end-start);
start = System.currentTimeMillis();
StringBuilder sbd=new StringBuilder("");
for (int i = 0; i < 10000; i++) {
sbd.append(i);
}
end=System.currentTimeMillis();
System.out.println(end-start);
}
通过上述代码,我们可以对比出三种拼接方式的运行效率.String的拼接不推荐使用,因为它在拼接过程中创建了很多对象,效率十分低下.因此如果要进行字符串修改,尽量使用StringBuilder和StringBuffer.
String类与StringBuilder或StringBuffer的相互转换
由于String类的不可修改性,为了方便字符串的修改,Java中又提供了StringBuilder和StringBuffer两个类.这两个类大部分功能都是相同的.
String类和StringBuilder或StringBuffer类不能直接转换.如果想要转换,需要遵循下列原则:
1.String类变StringBuilder 或 StringBuffer:利用StringBuilder 或 StringBuffer的构造方法或append()方法;
public static void main(String[] args) {
String str = "Hello CSDN";
//方式一:利用构造方法
StringBuffer stb = new StringBuffer(str);
StringBuilder std = new StringBuilder(str);
//方式二:利用append拼接
StringBuffer stb2 = new StringBuffer();
stb2.append(str);
StringBuilder std2 = new StringBuilder();
std2.append(str);
}
2.StringBuilder或StringBuffer变为String:调用toString()方法.
public static String func(){
StringBuffer s = new StringBuffer("Hello CSDN");
return s.toString();
}
public static String func1(){
StringBuilder s = new StringBuilder("Hello CSDN");
return s.toString();
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160688.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...