最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。
他们的优缺点在哪里呢?下面来看下
1、运行速度String<StringBuffer<StringBuilder
2、原因:String字符串常量,不可改变的对象,任何对String的改变都会创建新的String对象,而原有的对象就会变成垃圾被GC回收;而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。而StringBuffer与StringBuilder都是append,他们的区别在哪呢?先说一下集合的故事,HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也是如此,他们的原理和操作基本相同,区别在于StringBufferd支持并发操作,线性安全的,适 合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。
3、举例
String str = "This is a " + "simple" + "example";
StringBuffer builder= new StringBuffer("This is a ").append("simple").append("example");
从这我们会发现生成str对象的速度非常的快,StringBuffer占不到什么优势,这是为什么呢?
jvm会认为其实String str = "This is a " + "simple" + "example";就是String str = "This is a simple example";所以不需要什么时间。
但是当字符来至不同的String对象时,就没那么快了。
比如:
String str1 = "This is a ";
String str2 = "simple";
String str3 = "example";
String str = str1 + str2 + str3;
jvm会老老实实的按规矩来重新创建对象