String,StringBuilder,StringBuffer的区别

关于String:

       String虽不属于8大基本数据类型,但它的使用频率却很高,我们经常创建一个String对象来指向一个字符串。但是String是一个不可变对象,当我们改变String字符串的内容时,其实是创建了一个新的String对象来代替之前的String对象,。当我们频繁地改变一个字符串的内容时就会因为频繁的创建对象而造成内存消耗,特别是在进行IO操作时,我们一般都会使用StringBuilder或StringBuffer来进行数据的读写,而不是使用String。

关于StringBuffer和StringBuilder:

       StringBuilder和StringBuffer都提供了append(),complete(),insert() 等修改字符串的方法,而不需要去反复的创建对象,提高了程序的性能。StringBuilder和StringBuffer主要的区别在于,StringBuilder不是线程安全的,而StringBuffer是线程安全的,这是因为StringBuffer中为append()等方法加了同步锁,如下:

public synchronized StringBuffer append(String str) {
        super.append(str);
        return this;
    }

不过保证线程的同步也会带来少许的性能损耗,故如果程序是运行在单线程环境下,就使用StringBuilder,当我们的线程需要保证线程安全时,就使用StringBuffer。

原文地址:https://www.cnblogs.com/weimore/p/7819497.html