黑马程序员技术交流社区
标题:
String,StringBuffer,StringBuilder的区别
[打印本页]
作者:
vayne
时间:
2015-4-6 20:26
标题:
String,StringBuffer,StringBuilder的区别
今天面试的老师问到了这个问题,我胡说了一大堆
作者:
君嘘
时间:
2015-4-6 20:49
纠结,问到我的话估计我也不会说。
但是百度上找到的说法是。
String是常量。
StringBuffer是变量,线程安全。
StringBuilder是变量,非线程安全。
作者:
吴飞飞
时间:
2015-4-6 21:03
你今天怎么要回答这么多问题啊!!!!能一次全部说完么?
作者:
leonard
时间:
2015-4-6 21:34
String,StringBuffer和StringBuilder他们都可以存储和操作字符串,即包含多个字符的字符串数据。String类是字符串常量,就是一经定义不可更改。而StringBuffer是字符串变量,也叫字符串缓冲区,它的对象是可以扩充和修改的,线程安全,效率底。StringBuilder也是字符串变量,但是线程不安全,效率高。
作者:
18234133910
时间:
2015-4-6 21:43
额··这个问题确实会被经常问到。首先String:字符串常量, StringBuffer:字符串变量,StringBuilder:字符串变量。
至于他们三个的区别如下:
String:作为一个字符串常量,不可以修改,但是这其实是JVM的一个特点,例如如下:
String s = "cjkj";
s+=k;
Syso("s');//结果会是cjkjk
可能你会有疑问,这里其实是jvm的一种机制,在运行时首先会创建一个s对象,赋予cjkj 存储在方法区中的静态常量池中,然后再创建一个对象来执行第二行代码,也就是我们之前的S并没有改变,它还在常量池中,只不过把新对象的引用赋给了s,所以,当我们用String操作字符串时,实际上在不停的创建新的对象,而原来的对象就会变成垃圾等着被GC回收。这样对于内存的浪费是极大的 也就有了后面两个字符串变量。
StringBuilder:是线程非安全的,StringBuffer:是线程安全的。他们是字符串变量,我们的操作是在一个对象上进行,就不会像String创建那么多对象。
当字符串缓冲区被多个线程使用时,JVM不能保证StringBuilder是安全的,但是它的速度是最快的,StringBuffer是可以正确操作的。所以当我们在单线程下使用时建议使用StringBuilder。多线程使用StringBuffer。
综上:当需要操作少量数据时,String 单线程大量数据:StringBuilder,多线程大量数据StringBuffer。
希望能帮到你··也希望给我点回馈啊··
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2