Java Language Specification in Section 4.3.1州
对象是类实例或数组。
为什么不是
对象是类实例,数组是类实例。
这是为什么?我很确定Java的设计者并没有因为这种差异而心情不好,但他们有这样做的原因。这些原因是什么?
答案 0 :(得分:1)
如果你在上下文中阅读它会很明显
对象是类实例或数组。
参考值(通常只是引用)是指向这些的指针 对象,以及一个特殊的空引用,它不引用任何对象。
类实例由类实例创建显式创建 表达式(§15.9)。
数组由数组创建表达式显式创建 (§15.10.1)。
所以这就是它以这种方式定义的原因。他们创作的模式是不同的,这就是你如何以合理的方式定义它。
在阅读JLS时,从头到尾阅读各个部分总是一个好主意,因为概念通常是自上而下引入的:它们首先被命名,然后在后面的段落中进行解释。
当然你可以按照你的建议做到:
对象是类实例,数组也是类实例。
类实例由非数组类实例创建显式创建 表达式(第15.9节),如果它们不是数组或数组创建 表达式(第15.10.1节),如果它们是数组
或者您可以找到这些 not-array-but-object 的名称,让我们称之为 class schminstance ,然后我们回到原点。
如果问题是为什么必须首先创建不同的数组(例如,并非所有数组都是Array
类的实例),那是因为Java最初没有泛型/类型参数。但是他们需要类似于数组的东西(否则你就没有方法可以对任何数组进行排序),所以这就是他们想出来的。他们还使数组协变(String[]
类型的对象也是Object[]
,但只包含字符串的Object[]
不是String[]
) ,这使它们与泛型不同。