"abc"
是一个字符串字面量,由语言规范定义。
请参阅JLS 3.10.5:
字符串文字由用双引号括起来的零个或多个字符组成。字符可以用转义序列(第 3.10.6 节)表示 - 一个转义序列用于 U+0000 到 U+FFFF 范围内的字符,两个转义序列用于 U+010000 到范围内字符的 UTF-16 代理代码单元U+10FFFF。
推荐阅读:
- 字符串对象和字符串字面量之间的区别。
- Java 字符串池
另外,读字符串真的很特别:
字符串文字存储在一个公共池中。这有助于为具有相同内容的字符串共享存储空间以节省存储空间。通过 new 运算符分配的字符串对象存储在堆中,相同内容不共享存储。
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object
s1 == s1; // true, same pointer
s1 == s2; // true, s1 and s1 share storage in common pool
s1 == s3; // true, s3 is assigned same pointer as s1
s1.equals(s3); // true, same contents
s1 == s4; // false, different pointers
s1.equals(s4); // true, same contents
s4 == s5; // false, different pointers in heap
s4.equals(s5); // true, same contents