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

时间:2018-03-27 02:30:04

标签: java arrays multidimensional-array types primitive-types

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

  

一维数组中的元素必须是基本数据类型

我已经完成了数小时的研究,但我无法找到任何语句来支持此声明。

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

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

她接着说,一维数组不能保存对象,因为保存对象的数组变得多维。

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

我现在很困惑,我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

你的老师是完全错的。

例如,您可以拥有一个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
}

答案 1 :(得分:1)

数组可以存储任何类型的元素 - 原始intlongfloat,包装Integer,像这样的对象StringPersonAnimal

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

  • 使用原语类型,它是实际值的连续块, 即, int 数组将使每个int占用4个字节, long 的数组 将每个占用8个字节,依此类推。
  • 使用对象(String,Person,Animal)数组,该数组将存储引用变量(这不是C ++中的指针)给所有这些对象和那些引用将是连续的块。

如果您拥有Person p1 = new Person()Person p2 = new Person()并存储在数组Person[] arr = {p1, p2}中,就像这样。

arr p1 p2 存储在内存中,当您遍历数组时,您可以访问实际的 Person 对象,它本身可以是许多String或int值的混合(如id,name,address等)。所以这仍然可以提供数组的效率。

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

您可以在其他许多地方详细了解此信息并与老师联系。