如果像Java中的数组那样的数据结构本身是对象,怎么会是任何类型?

问题描述 投票:0回答:2

我可能对OOP有点困惑,只是进入了OOP,但是如果java中的数组是一个对象,它在java中从Array类中调用Array构造函数以创建它的实例,那怎么办Java中的数组可能是原始数据类型还是任何对象类型?如果这是Array的类,则Array的类型是否应该为Array类型?如果我创建了一个名为Car的类,然后创建了一个名为redCar的对象,则该对象的类型为Car still。这不仅适用于数组,还适用于其他数据结构。欢迎任何简单的解释。

java oop
2个回答
0
投票

Java中的数组是一种特殊类型,就像String一样。它不是原始类型,但是您可以通过特殊方式实例化它。如果创建Car的数组,则类型为Car[]。数组在Java中称为“引用类型”。这意味着它不会在内存中存储自己的任何内容,而只是引用内存中的其他变量。最后,就像Java中的任何其他对象一样,任何数组都将扩展Object。请注意,在Java中,还有一个名为Array的类。 Java中的数组是ArrayNOT实例。 Array只是一个实用程序类,它提供用于操作和访问数组的有用的静态方法。


0
投票

它正在从Java中的Array类调用Array构造函数以使其实例化

不正确。数组类型不是类。按照JLS 10.8

尽管数组类型不是类,但是每个数组的Class对象的行为就像...

因此,数组类型没有构造函数。数组对象是使用newarrayanewarray字节码指令创建的。请注意,即使数组不是类的实例,它们仍然是objects,因为按照JLS 4.3.1

一个对象是类实例或数组。

仅从这两个引号中,您应该意识到Java和JVM给数组带来了非常特殊的待遇。

Java中的数组怎么可能是原始数据类型或任何对象类型?

您似乎认为只有一种Array类型。这不是真的。您可以将任何(非参数化的)引用类型或原始类型转换为数组类型。例如,Car[]Car s数组的类型,int[]int s数组的类型。 Car[]int[]都是与Carint不同的类型。

不要忘记,可以将another []添加到数组类型以使其成为2D数组,例如Car[][],它也是数组类型。

© www.soinside.com 2019 - 2024. All rights reserved.