如何声明不同数据类型的数组
我正在使用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
因此,当您看到一个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等