A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天面试的老师问到了这个问题,我胡说了一大堆

4 个回复

倒序浏览
纠结,问到我的话估计我也不会说。
但是百度上找到的说法是。
String是常量。
StringBuffer是变量,线程安全。
StringBuilder是变量,非线程安全。
回复 使用道具 举报
你今天怎么要回答这么多问题啊!!!!能一次全部说完么?
回复 使用道具 举报
String,StringBuffer和StringBuilder他们都可以存储和操作字符串,即包含多个字符的字符串数据。String类是字符串常量,就是一经定义不可更改。而StringBuffer是字符串变量,也叫字符串缓冲区,它的对象是可以扩充和修改的,线程安全,效率底。StringBuilder也是字符串变量,但是线程不安全,效率高。
回复 使用道具 举报
额··这个问题确实会被经常问到。首先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。
希望能帮到你··也希望给我点回馈啊··
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马