32

我正在使用 Java 中的数组,我有一个问题。我知道Java中的数组是相似数据类型的集合,如下图:

int[] x = new int[]{1,2,3};

上面的声明可以理解为一个Integer数组,它是整数类型的集合。

考虑一下:

Object[] x = new Object[]{1,2,3,"srk"};

在这里,我可以说上面是一个数组,它是一个不相似数据类型的集合,还是一个Object相似数据类型的数组,即对象?

我对此感到困惑和怀疑。在 Java 中,是否可以创建一个数组或任何类型的集合来保存不同的数据类型?

4

6 回答 6

43

Java 中的所有对象都扩展了 Object。

因此,当您通过将数组声明为对象数组来创建数组时,它可能是完全非描述性的:

Object[] arr = new Object[6];

此代码创建一个长度为 6 的对象数组。

例如,您可以创建一个数组,其中条目成对出现在两个数组中。在这种情况下,第一个对象是字符串,第二个对象是整数。

Object[] arr = new Object[6];

arr[0] = new String("First Pair");
arr[1] = new Integer(1);
arr[2] = new String("Second Pair");
arr[3] = new Integer(2);
arr[4] = new String("Third Pair");
arr[5] = new Integer(3);

现在,如果您想真正弄清楚这些对象是什么,则需要进行强制转换:

int x = (Integer)arr[1];
于 2013-05-03T16:30:48.757 回答
5

要添加到其他答案,您可以将所需的任何内容放入对象数组中。但是,如果您希望访问Object特定元素具有的任何不与 共享的方法或属性,那么您必须将其向下转换为所需的类型,因为 Java 会将其识别为类型Object- 这是您必须小心的事情和。

例子:

    Object test[];
    test = new Object[]{1, 2, "three", new Date()};
    System.out.println( ( (Date)test[3] ).getMonth() );
    // the above line will output '4', but there will be a compilation error
    // if the cast (Date) is emitted
于 2013-05-03T16:40:41.520 回答
4

它完全按照您的想法工作:

Object[] x = new Object[]{1,2,3,"srk"};
for(Object o: x){
   System.out.println(o.getClass());
}

输出:

class java.lang.Integer
class java.lang.Integer
class java.lang.Integer
class java.lang.String
于 2013-05-03T16:34:00.267 回答
2

在java中,是否可以创建一个数组或任何类型的集合来保存不同的数据类型?

是的。

“异构集合”是最常用于此的术语
,异构数组的意义何在?在 java 中讨论它们。

对于集合类型,您可以使用List<Object>可以添加多种对象的对象,以及List<?>可以接收多种列表但由于类型差异而无法添加的列表。


Java 数组的变化有点奇怪,因为

Object[] arr = new String[3];  // OK
List<Object> list = new ArrayList<String>();  // DOES NOT COMPILE

arr[0] = Integer.valueOf(42);  // RUNTIME ERROR

因此,当您看到 an 时,Object[]您需要知道它是通过创建new Object[]的,以便安全地用作异构数组。这与Collection<Object>类型系统为您提供一定程度的安全性不同。

于 2013-05-03T16:32:19.547 回答
0

在 Java 中,您可以创建一个对象数组

Object[] x = new Object[10];

并且您可以将任何类的实例的引用分配给其元素,因为 Java 中的任何类都是对象。

但它与原始数组不同。int[]只能包含int元素,long[]只能包含longs 等

于 2013-05-03T16:33:01.910 回答
0

创建一个 Object[] 数组是一种方法。否则,您可以使用所需的变量创建一个类,并拥有该类对象的数组。

class MyClass{
    int var_1;
    String var_2;
    ...
    ...
}
...
MyClass[] arr = new MyClass[3];

然后,在需要的地方使用 arr 。

于 2013-05-03T16:34:48.777 回答