为什么java.lang.String
是唯一存在两种创建方式的类:
1)使用"new
“关键字的普通方式。
String s = new String("abc");
2)使用String
文本(仅适用于String
类)
String s = "abc";
那么为什么有String
字面量而没有其他类的字面量呢?
发布于 2009-09-10 12:11:48
String虽然是一个普通的类,但它代表了编程的基本元素之一(其他元素是数字和布尔值)。因此,Java从一开始就将String对象视为半原始变量,并允许这样做。
稍后,当自动装箱成为标准编译器的一部分时,您还可以用这种方式构建数值包装器对象。
Integer i = 123;
正如Tom Hawtin-tackline在对问题的评论中提到的那样。
发布于 2009-09-10 12:08:01
简而言之,因为语言设计者喜欢它。
我猜String是一个很常见的类,所以他们做了一个例外。我相信也有其他一些类似的例外(参见Tom Hawtins评论)
发布于 2009-09-10 12:13:41
抛开自动装箱(这不算IMO --原语类型而不是类;只有一个隐式转换到包装器类),String(String)
构造函数实际上很有用。它接受字符数据的副本,这意味着如果原始字符串很小,但具有较大的支持char[]
,则新字符串独立于它。
例如,如果您正在从文件中读取较短的行,则这可能很重要。
至于为什么会有字符串文字:因为它们很有用。你会用什么来代替?您是否希望强制开发人员使用:
String x = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });
同时又得不到实习机会?
您还需要哪个其他类的字面量?可以说,映射和列表的文字可能会很有用--我不记得它们是否会出现在Java7中。您可以将数组初始化器视为“有点像文字”,因为它是对象初始化的简写。
https://stackoverflow.com/questions/1404887
复制相似问题