为什么对象是Java中的类实例或数组?

时间:2017-11-03 13:36:55

标签: java arrays class

Java Language Specification in Section 4.3.1

  

对象类实例数组

为什么不是

  

对象是类实例,数组是类实例。

这是为什么?我很确定Java的设计者并没有因为这种差异而心情不好,但他们有这样做的原因。这些原因是什么?

1 个答案:

答案 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[]) ,这使它们与泛型不同。