String 类
概览
String 被声明为 final,因此它不可被继承。
在 Java 8 中,String 内部使用 char 数组存储数据。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}Copy to clipboardErrorCopied
在 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;
}Copy to clipboardErrorCopied
value 数组被声明为 final,这意味着 value 数组初始化之后就不能再引用其它数组。并且 String 内部没有改变 value 数组的方法,因此可以保证 String 不可变。
String 对象的两种创建方式
String str1 = "abcd";
String str2 = new String("abcd");
String str3 = new String("abcd");
System.out.println(str1 == str2); //false
System.out.println(str1 == str3); //false
System.out.println(str2 == str3); //false
这两种不同的创建 String 对象实例的方法是有差别的:
- 第一种方式是直接指向一个**字符串常量池(String Constant Pool)**中的"abcd"字符串对象的引用;
- 第二种方式是直接在堆(Heap)内存中创建一个新的对象,而这个对象的 value 指向了"abcd"字符串对象。
...