String,Stringbuilder,Stringbuffer的区别?
– 如果你答string维护的是字符串常量,Stringbuilder,Stringbuffer适合频繁修改字符串的情况,且Stringbuffer线程安全。
这么回答也OK,但是再问你一句为什么?? 怕是就懵逼了,网上搜的答案呀, 也没细品过为什么啊!为什么要问我为什么!

我知道你们懒,这么帮你查一下源码看看为什么。

1. String:

String,Stringbuilder,Stringbuffer的区别,进来看看源码怎么说的String,Stringbuilder,Stringbuffer的区别,进来看看源码怎么说的
   String中维护了一个final的字符数组,用来存储字符串值,且不能修改。构造器也是将char数组和hash进行赋值。所以每次new字符串或者追加字符串的时候,就会在常量池中维护一个新的final数组。

2. Stringbuilder,Stringbuffer

String,Stringbuilder,Stringbuffer的区别,进来看看源码怎么说的   Stringbuilder,Stringbuffer的源码,都是继承了AbstractStringBuilder抽象类的, 其中维护了一个char数组和数组长度count。 这个char数组是可以修改的, 所以每次append的时候,就会来修改char数组, 最后调用toString()方法时,将char数组转为String。
String,Stringbuilder,Stringbuffer的区别,进来看看源码怎么说的

总结:
String:底层维护了一个final的char数组,赋值后就不能修改。 所以每次追加字符串会重新维护一个新的final的char数组。
Stringbuilder,Stringbuffer:都继承了AbstractStringBuilder抽象类,其中维护了一个char数组和数组长度count。 这个char数组是可以修改的,每次追加字符串时,可以修改char数组,不用新创建一个。

相关文章: