额··这个问题确实会被经常问到。首先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。
希望能帮到你··也希望给我点回馈啊·· |