为什么String是Java中文字存在的唯一类?

Sil*_*ior 2 java string literals

为什么java.lang.String存在两种创作方式的唯一类:

1)使用" new"关键字的正常方式.

String s = new String("abc");
Run Code Online (Sandbox Code Playgroud)

2)with Stringliteral(仅适用于String课程)

String s = "abc";
Run Code Online (Sandbox Code Playgroud)

那么为什么有String任何其他类的文字和文字?

Gle*_*len 10

简短的回答,因为语言设计师觉得这样.

我猜String是一个普通的类,他们做了一个例外.我确信还有一些其他类似的例外,(参见Tom Hawtins评论)


Jon*_*eet 5

不考虑自动装箱(不计算IMO - 文字是原始类型而不是类;只是隐式转换到包装类),String(String)构造函数实际上是有用的.它需要一个字符数据的副本,这意味着如果原始字符串很小但具有大的支持char[],则新字符串与其无关.

例如,如果您从文件中读取短行,这可能很重要.

至于为什么有字符串文字:因为它们很有用.你还会有什么?你想强迫开发者使用:

String x = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });
Run Code Online (Sandbox Code Playgroud)

并且同时没有实习?

你想要一个文字的其他课程是什么?可以说地图和列表的文字是有用的 - 我不记得他们是否会使用Java 7.您可以将数组初始值设定项视为"有点像文字",因为它是对象初始化的简写.