我试图了解数组在 Java 中是如何工作的。我查看了源代码,并将构造函数设为私有。如果我写如下内容,它是如何工作的:
String [] myArray = new String [10];
它知道这是一个数组,只需加上括号 [ ]?
此外,他们为什么要做到这一点,所以它不会被诸如如何创建 ArrayList 之类的东西实例化?
ArrayList<String> myArray = new ArrayList<String>(10);
数组不是对象吗?是什么让它与众不同?
它知道这是一个数组,只需放置括号
[]?
是的,它就是这样工作的。这是一种用于声明和创建数组(以及访问它们的元素)的特殊语法。
该语言(和 JVM)对数组有特殊的支持(因为它们经常被使用)。除了你找到的括号外,还有一个特殊的 for-each-loop,一种创建数组字面量的语法,数组可用于 vararg 方法参数。
数组不是对象吗?
Java 中的数组是对象(甚至是原始类型的数组)。
是什么让它与众不同?
没有什么不一样的...
除了您可以将数组分配给类型的变量Object(并且它们可以是null)之外,它们中并没有太多类似对象的东西。例如,虽然它们有诸如 equals 和 toString 之类的方法,但它们的实现可能并不符合您的预期(请参阅 Arrays 类以获得更有用的版本)。您也不能子类化使数组工作的内部“类”。
综上所述,数组是对象,是特殊的对象。与 ArrayList 不同,ArrayList 的构建方式与任何其他类一样。您可以在 Java 中创建自己的 Collection,但是要构建自己的数组,您需要构建自己的 JVM。
Arrays是固定大小的(需要在创建Object时声明大小),所以在运行时我们不能增加Array的大小。
虽然ArrayList在运行时动态增长,即使我们在创建时声明 Size。
数组是一个对象,但是数组也可以是基元的,但基元数组仍然是一个对象。
Furthermore, why did they make it so it isn't instantiated by something like how ArrayList are created?
ArrayList 使用泛型来允许扩展类型,而泛型不能用于基元。更不用说,泛型出现在 Java 5 中,而数组一直存在。
Java 数组(用 标记[])是一种特殊的对象。非常喜欢int和朋友。ArrayLists这些都是功能齐全的课程。有许多不同之处,您会发现封装这些类型的类,以便您可以像普通类一样操作它们。最值得注意的是,您不能子类化数组或int. 但是你会发现ArrayList或者Integer如果你想把它们面向对象。
还要注意的是参数化类型,即ArrayList<String>表示法,是 Java 的一个相对较新的补充(我认为它出现在 Java 1.5 中,但我可能弄错了)。在此之前,集合将包含Object你必须转换回正确的类的 bare。
它知道这是一个数组,只需加上括号 [ ]?
是的。
此外,他们为什么要做到这一点,所以它不会被诸如如何创建 ArrayList 之类的东西实例化?
因为(a)他们没有和(b)他们为什么要这样做?如果你想知道答案,那你就来错地方了。问吉姆·高斯林。有很多其他语言以相同的方式完成。为什么要特别关注 Java?
数组不是对象吗?
是的。
是什么让它与众不同?
[]语法被特殊处理的事实?有无数种数组类型的事实:(每个原始类型一个,每个可能的类一个)乘以(从 1 到 Integer.MAX_INT 的任意数量的维度)。