[Java]String,StringBuilder和StringBuffer的区别

为君一笑 提交于 2020-02-29 17:06:22

String:字符串常量。通常在字符串不经常变化的时候使用。

StringBuilderStringBuffer:字符串缓冲变量

且其中StringBuffer中的大多数方法都采用了synchronize关键字进行了修饰,因此适用于多线程环境下在字符缓冲区进行操作,并且时线程安全的。StringBuilder适用于单线程下在字符缓冲区进行大量操作,主要原因是它的方法没有synchronized关键字修饰(线程不安全)

StringBuilderStringBuffer的“可变”特性总结如下:
(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();
    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!