Java String StringPool详解
概览
String在java中并不是值类型,而是对象;和其它包装类型一样被设计成不可变对象;String类声明final类型,所以也不能被继承。
在Java 8中,String内部使用字符数组存储数据。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence{
private final char value[];
}
在Java 9中,String内部使用byte数组存储数据,同时使用coder来标识字符串的编码信息。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final byte[] value;
/** The identifier of the encoding used to encode the bytes in {@code value}. */
private final byte coder;
}
在String
类的内部将value
声明为final
常量字段,并在内部没有提供任何修改value
字段的方法,保证了不可变性。(value
被声明成final
类型后也只能被赋值一次,其后就不能再对其进行修改,这是final
的特性)
new String(“abc”)与String.valueOf(“abc”)的区别
String a = new String("abc");
String b = new String(