我们说String
类是不可变的,因为该类使用了final
修饰,但是StringBuilder
类也是使用了final
修饰,那为什么说StringBuilder
是可变的?
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
@Stable
private final byte[] value;
}
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence{
}
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
byte[] value;
}
通过查看源码发现String
类和StringBuilder
本质都是字节数组,但是String
类的字节数组采用final
修饰。