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

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

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

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

考虑一下:

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

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

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

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

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

它完全符合您的想法:

 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 

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

是。

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

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


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

 Object[] arr = new String[3]; // OK List list = new ArrayList(); // DOES NOT COMPILE arr[0] = Integer.valueOf(42); // RUNTIME ERROR 

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

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

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

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

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

 Object[] x = new Object[10]; 

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

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