0

我试图了解数组在 Java 中是如何工作的。我查看了源代码,并将构造函数设为私有。如果我写如下内容,它是如何工作的:

String [] myArray = new String [10];

它知道这是一个数组,只需加上括号 [ ]?

此外,他们为什么要做到这一点,所以它不会被诸如如何创建 ArrayList 之类的东西实例化?

ArrayList<String> myArray = new ArrayList<String>(10);

数组不是对象吗?是什么让它与众不同?

4

5 回答 5

3

它知道这是一个数组,只需放置括号[]?

是的,它就是这样工作的。这是一种用于声明和创建数组(以及访问它们的元素)的特殊语法。

该语言(和 JVM)对数组有特殊的支持(因为它们经常被使用)。除了你找到的括号外,还有一个特殊的 for-each-loop,一种创建数组字面量的语法,数组可用于 vararg 方法参数。

数组不是对象吗?

Java 中的数组是对象(甚至是原始类型的数组)。

是什么让它与众不同?

没有什么一样的...

除了您可以将数组分配给类型的变量Object(并且它们可以是null)之外,它们中并没有太多类似对象的东西。例如,虽然它们有诸如 equals 和 toString 之类的方法,但它们的实现可能并不符合您的预期(请参阅 Arrays 类以获得更有用的版本)。您也不能子类化使数组工作的内部“类”。

综上所述,数组是对象,是特殊的对象。与 ArrayList 不同,ArrayList 的构建方式与任何其他类一样。您可以在 Java 中创建自己的 Collection,但是要构建自己的数组,您需要构建自己的 JVM。

于 2013-01-07T06:55:25.063 回答
0

Arrays是固定大小的(需要在创建Object时声明大小),所以在运行时我们不能增加Array的大小。

虽然ArrayList在运行时动态增长,即使我们在创建时声明 Size。

于 2013-01-07T06:38:59.417 回答
0

数组是一个对象,但是数组也可以是基元的,但基元数组仍然是一个对象。

Furthermore, why did they make it so it isn't instantiated by something like how ArrayList are created?

ArrayList 使用泛型来允许扩展类型,而泛型不能用于基元。更不用说,泛型出现在 Java 5 中,而数组一直存在。

于 2013-01-07T06:42:08.897 回答
0

Java 数组(用 标记[])是一种特殊的对象。非常喜欢int和朋友。ArrayLists这些都是功能齐全的课程。有许多不同之处,您会发现封装这些类型的类,以便您可以像普通类一样操作它们。最值得注意的是,您不能子类化数组或int. 但是你会发现ArrayList或者Integer如果你想把它们面向对象。

还要注意的是参数化类型,即ArrayList<String>表示法,是 Java 的一个相对较新的补充(我认为它出现在 Java 1.5 中,但我可能弄错了)。在此之前,集合将包含Object你必须转换回正确的类的 bare。

于 2013-01-07T06:44:35.350 回答
0

它知道这是一个数组,只需加上括号 [ ]?

是的。

此外,他们为什么要做到这一点,所以它不会被诸如如何创建 ArrayList 之类的东西实例化?

因为(a)他们没有和(b)他们为什么要这样做?如果你想知道答案,那你就来错地方了。问吉姆·高斯林。有很多其他语言以相同的方式完成。为什么要特别关注 Java?

数组不是对象吗?

是的。

是什么让它与众不同?

[]语法被特殊处理的事实?有无数种数组类型的事实:(每个原始类型一个,每个可能的类一个)乘以(从 1 到 Integer.MAX_INT 的任意数量的维度)。

于 2013-01-07T08:59:00.250 回答