String:字符串常量。通常在字符串不经常变化的时候使用。
StringBuilder和StringBuffer:字符串缓冲变量
且其中StringBuffer中的大多数方法都采用了synchronize关键字进行了修饰,因此适用于多线程环境下在字符缓冲区进行操作,并且时线程安全的。StringBuilder适用于单线程下在字符缓冲区进行大量操作,主要原因是它的方法没有synchronized关键字修饰(线程不安全)
StringBuilder和StringBuffer的“可变”特性总结如下:
(1)append,insert,delete方法最根本上都是调用System.arraycopy()这个方法来达到目的
(2)substring(int, int)方法是通过重新new String(value, start, end - start)的方式来达到目的。因此,在执行substring操作时,StringBuilder和String基本上没什么区别。
总的来说,三者在执行速度方面的比较:StringBuilder > StringBuffer > String
贴一段代码来看一下面试题字符串拼接中怎么使用:
/*
* 请实现一个函数,将一个字符串中的每个空格替换成“%20”。
* 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
* */
public class Swordquest2 {
public String replaceSpace(StringBuffer str) {
if(str==null){
return null;
}
StringBuilder str1=new StringBuilder();//StirngBuilder更适合用于单线程
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){//注意时char类型而非字符串类型
str1.append("%");//字符串拼接工作
str1.append("2");
str1.append("0");
}else{
str1.append(str.charAt(i));
}
}
return str1.toString();
}
}
来源:CSDN
作者:88_Rising
链接:https://blog.csdn.net/Richchigga/article/details/104574195