为什么 String 的内容不可不变 StringBuffer 内容可变
2016-12-02 16:49
435 查看
研读了java代码 String.java 文件中实现
使用了 final 关键字 内容不可 over write
private final char value[];
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L; /** * Class String is special cased within the Serialization Stream Protocol. * * A String instance is written into an ObjectOutputStream according to * <a href="{@docRoot}/../platform/serialization/spec/output.html"> * Object Serialization Specification, Section 6.2, "Stream Elements"</a> */ private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0]; /** * Initializes a newly created {@code String} object so that it represents * an empty character sequence. Note that use of this constructor is * unnecessary since Strings are immutable. */ public String() { this.value = "".value; }
StringBuffer 中 使用了transient 关键字 所以变量不会被序列化
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence { /** * A cache of the last value returned by toString. Cleared * whenever the StringBuffer is modified. */ private transient char[] toStringCache; /** use serialVersionUID from JDK 1.0.2 for interoperability */ static final long serialVersionUID = 3388685877147921107L; /** * Constructs a string buffer with no characters in it and an * initial capacity of 16 characters. */ public StringBuffer() { super(16); }
相关文章推荐
- 为什么String对象不可变,而StringBuffer可变?
- 为什么String对象不可变,而StringBuffer可变?
- 为什么指向字符串的指针内容有时可变有时不可变?
- StringBuffer可变String不可变的真正原因
- 为什么String被设计为不可变?是否真的不可变?
- Java String为什么是不可变类,StringBuffer与StringBuilder区别
- Java String为什么是不可变类,StringBuffer与StringBuilder区别
- String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?
- String、StringBuffer、StringBuilder 的区别?String为什么是不可变的?
- String,StringBuffer与StringBuilder的区别以及String为什么是不可变的?
- java String不可变对象,但StringBuffer是可变对象
- String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?
- java:可变类StringBuffer与不可变类String
- Java中的String为什么是不可变的? -- String源码分析
- 为什么String被设计为不可变
- 黑马程序员_为什么在java中String是不可变的?
- String的内存模型,为什么String被设计成不可变的
- 从为什么String=String谈到StringBuilder和StringBuffer
- 关于Java中的String为什么不可变
- Java中的String为什么说是不可变的?