2013-05-03 131 views
19

我正在处理java中的数组,我有一个问题。 我知道在Java阵列是类似的数据类型的集合,如下面如何声明不同数据类型的数组

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

以上声明可以被理解为一个整数阵列,它是整数类型的集合。

考虑这个

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

在这里,我可以说,上面是一个数组是DIS-类似的数据类型的集合。 或
它是一个类似数据类型的对象数组,即..,对象。

我对此很茫然并怀疑。 在java中,是否可以创建一个数组或可以容纳不同数据类型的任何类型的集合?

+1

我可以检查它,但是,我认为这将是更好的得到专家的建议像你先生后得出结论。 – srk 2013-05-03 16:38:49

+0

如果是,请关闭此问题。 – srk 2013-05-03 16:43:01

+3

@duffymo,将JDK作为专家对待只适用于大多数JDK实现可能会同意的事物,并且不能可靠地排除Java中数组差异等奇怪情况。 – 2013-05-03 16:43:55

回答

22

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

int x = arr [1] .intValue();'不会工作,因为'Object'上没有'intValue()'方法。 – 2013-05-03 16:40:47

+0

感谢迈克指出了它。修正它 – 2013-05-03 17:01:56

2

在java中,是有可能创造一个数组或任何类型的集合哪些可以容纳不同的数据类型?

是的。

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

对于收集类型,您可以使用可添加多种对象的List<Object>和可接收多种列表但由于type variance而无法添加的List<?>


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>不同,类型系统为您提供某种程度的安全性。

0

在Java中,你可以创建对象

Object[] x = new Object[10]; 

的数组,可以分配给任何类其元素的实例的引用,因为在Java中的任何类是一个对象。但是它与原始数组有所不同。 int[]只能包含int元素,long[]只有long S,等

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 
1

创建一个Object []数组是一个办法做到这一点。否则,你可以用你想要的变量创建一个类,并且有一个该类的对象的数组。

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

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

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