我正在使用Java中的数组,我有一个问题。 我知道Java中的数组是类似数据类型的集合,如下所示:
int[] x = new int[]{1,2,3};
上述声明可以读作Integer
数组,它是整数类型的集合。
考虑一下:
Object[] x = new Object[]{1,2,3,"srk"};
在这里,我可以说上面是一个数组,它是一个不相似的数据类型的集合,还是一个类似数据类型的Object
数组,即对象?
我对此感到困惑和持怀疑态度。 在Java中,是否可以创建一个可以容纳不同数据类型的数组或任何类型的集合?
答案 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
个等等