一维数组的元素是否必须是 Java 中的原始数据类型?

Do the elements of a one-dimensional array have to be of primitive data type in Java?

我的计算机编程老师声称在 Java:

The elements in a one-dimensional array must be of primitive data type

我已经做了几个小时的研究,但我找不到任何 陈述来支持这个说法。

我知道我可以在 Java 中创建对象数组。 甚至 CLI 参数也通过 String 数组传递到程序中。

她的理由是String[]可以看作是字符的多维数组。我能理解这一点,但我看不出这如何适用于所有对象。

她接着说,一维数组不能容纳对象,因为容纳对象的数组会变成多维的。

我无法理解 ObjectIntegerScanner 的数组如何可以是多维的。

我现在很迷茫,是不是漏了什么?

你的老师完全错了。

例如,您可以有一个 BigDecimal:

的数组
BigDecimal[] numbers = { BigDecimal.ZERO, BigDecimal.ONE };

Person的数组:

Person[] people = { new Person("John", 20), new Person("Jane", 21) };

Person 为:

class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // TODO getters
}

数组可以存储任何类型的元素 - 原始intlongfloat,包装IntegerStringPersonAnimal 等对象

您必须了解任何 Array 数据结构都应存储为 contiguous 内存块,无论是什么,相同的数据类型。

  • 对于primitive类型,它是实际值的连续块, 即,int 数组将每个 int 占用 4 个字节,long 数组 将每个占用8个字节,依此类推。
  • 使用 objects (String, Person, Animal) 数组,数组将存储 reference variable(这不是指针就像在 C++ 中一样)到所有这些对象,这些引用将在连续的块中。

就像你有 Person p1 = new Person()Person p2 = new Person() 并存储在数组 Person[] arr = {p1, p2} 中一样。

arr 会将引用 p1p2 存储在内存中,当你遍历数组你可以到达实际的 Person 对象,它本身可以是许多 String 或 int 值(如 id、name、address 等)的混合。所以这仍然给你一个数组的效率。

这并不意味着 arr 以任何方式变得多维。

您可以在许多其他地方阅读有关此内容的更多详细信息,然后返回给您的老师。