题目:请简单描述一下String,StringBuffer和StringBuilder的区别,并解释一下为什么String是不可变的。
分析:对于以上三个关于字符串的类,主要区别如下:
String:字符串常量,其属性为final。
StringBuffer:字符串变量,线程安全。
StringBuilder:字符串变量,非线程安全。
1.String和StringBuffer的区别主要在于String是不可变的,执行如下代码:
String a = "1";
a = a + "2";
StringBuffer b = new StringBuffer("2");
b.append("3");
对于与a来说,当执行a = a + "2";之后,实际上JVM生成了一个新的String对象,然后将a指向新的对象,表面上看起来没有什么特别的,但是底层其实执行了较多的内存操作,所以对于那些需要经常变化的字符串,最好不要用String;对于b来说,append操作只是在原来的字符串后面添加了一个字符,所以经常变换内容的字符串建议使用StringBuffer。
2.StringBuffer和StringBuilder的主要区别在与线程安全方面。
StringBuilder是非线程安全的,但是它的效率要比Buffer高,所以在单线程操作的情况下,最好用StringBuilder替代StringBuffer。
由于笔者水平有限,给各面试题提供的思路或代码难免会有错误,还请读者批评指正。另外,热忱欢迎读者能够提供更多、更好的面试题,本人将感激不尽。如有任何意见或建议,欢迎在评论中告知。
博主徐方磊对本博客文章享有版权。网络转载请注明出处http://blog.csdn.net/shishengshi。整理出版物请和作者联系。