首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

StringBuffer&StringBuilder不可变?该如何处理

2012-01-18 
StringBuffer&StringBuilder不可变?大家都说String不可变的原因是因为JDK源码中String类声明为final的原因

StringBuffer&StringBuilder不可变?
大家都说String不可变的原因是因为JDK源码中String类声明为final的原因.
那么我有一个问题:
既然String类声明为fianl就不可变.
那么StringBuffer类和StringBuilder也是被声明为final的.为什么他俩又可以变呢?

[解决办法]
大家都说String不可变的原因是因为JDK源码中String类声明为final的原因.
-----------------------------------------
final保证的只是不可被继承而已。
String那特殊而变态的不变是String自己的实现造成的:
StringBuffer和StringBuilder有append之类改变自己的方法,String所有改变自己的方法其实都new出了新类( ̄(工) ̄)
[解决办法]
关于String的不可改变的分析,以及与StringBuilder的区别。

理解错误,String不可变是因为
1 类自身是final的
2 类里面的内容也是final的。比如最重要的保存字符串的部分
 private final char value[];

而StringBuilder呢?
public StringBuilder() {
super(16);
}
在 AbstractStringBuilder 里面是
 char value[];
 AbstractStringBuilder(int capacity) {
value = new char[capacity];
 }

可见,这个char是可以变化的。通过一个 expandCapacity的方法进行扩充容量。
这就是区别

热点排行