我可能对OOP有点困惑,只是进入了OOP,但是如果java中的数组是一个对象,它在java中从Array类中调用Array构造函数以创建它的实例,那怎么办Java中的数组可能是原始数据类型还是任何对象类型?如果这是Array的类,则Array的类型是否应该为Array类型?如果我创建了一个名为Car的类,然后创建了一个名为redCar的对象,则该对象的类型为Car still。这不仅适用于数组,还适用于其他数据结构。欢迎任何简单的解释。
Java中的数组是一种特殊类型,就像String
一样。它不是原始类型,但是您可以通过特殊方式实例化它。如果创建Car
的数组,则类型为Car[]
。数组在Java中称为“引用类型”。这意味着它不会在内存中存储自己的任何内容,而只是引用内存中的其他变量。最后,就像Java中的任何其他对象一样,任何数组都将扩展Object
。请注意,在Java中,还有一个名为Array
的类。 Java中的数组是Array
的NOT实例。 Array
只是一个实用程序类,它提供用于操作和访问数组的有用的静态方法。
它正在从Java中的Array类调用Array构造函数以使其实例化
不正确。数组类型不是类。按照JLS 10.8:
尽管数组类型不是类,但是每个数组的
Class
对象的行为就像...
因此,数组类型没有构造函数。数组对象是使用newarray
或anewarray
字节码指令创建的。请注意,即使数组不是类的实例,它们仍然是objects,因为按照JLS 4.3.1:
一个对象是类实例或数组。
仅从这两个引号中,您应该意识到Java和JVM给数组带来了非常特殊的待遇。
Java中的数组怎么可能是原始数据类型或任何对象类型?
您似乎认为只有一种Array
类型。这不是真的。您可以将任何(非参数化的)引用类型或原始类型转换为数组类型。例如,Car[]
是Car
s数组的类型,int[]
是int
s数组的类型。 Car[]
和int[]
都是与Car
和int
不同的类型。
不要忘记,可以将another []
添加到数组类型以使其成为2D数组,例如Car[][]
,它也是数组类型。