如何声明不同数据类型的数组

时间:2013-05-03 16:27:05

标签: java arrays

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

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

上述声明可以读作Integer数组,它是整数类型的集合。

考虑一下:

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

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

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

6 个答案:

答案 0 :(得分:27)

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

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

Object[] arr = new Object[6];

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

因此,例如,您可以创建一个数组,其中条目成对出现。在这种情况下,第一个对象是String,第二个是Integer。

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];

答案 1 :(得分:4)

要添加到其他答案,您可以在对象数组中放置您想要的任何内容。但是,如果您希望访问特定元素所具有的任何方法或属性(不与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

答案 2 :(得分:3)

它完全符合您的想法:

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

答案 3 :(得分:2)

  

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

“异构集合”是最常用于此的术语,和 what is the point of heterogenous arrays?在java中讨论它们。

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


Java数组的方差有点奇怪,因为

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

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

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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

Object[] x = new Object[10];

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

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