Java:如何确定对象数组中的对象类型?

时间:2011-02-11 00:21:53

标签: java

示例:

Object[] x = new Object[2];
x[0] = 3; // integer
x[1] = "4"; // String
System.out.println(x[0].getClass().getSimpleName()); // prints "Integer"
System.out.println(x[1].getClass().getSimpleName()); // prints "String"

这让我想知道:第一个对象元素是类Integer的实例?或者它是原始数据类型int?有区别,对吧?

因此,如果我想确定第一个元素的类型(是整数,双精度,字符串等),该怎么做?我使用x[0].getClass().isInstance()吗? (如果是,怎么样?),还是我还用别的东西?

4 个答案:

答案 0 :(得分:5)

intInteger之间存在差异,只有Integer可以进入Object [],但自动装箱/取消装箱会使其难以锁定。

一旦将值放入数组中,它就会转换为Integer并且它的来源被遗忘。同样,如果您声明int []并将Integer放入其中,则会在当场将其转换为int,并且其中Integer的任何痕迹都不是{{1}}。保留。

答案 1 :(得分:5)

x是一个对象数组 - 因此它不能包含基元,只能包含对象,因此第一个元素的类型为Integer。它通过自动装箱成为一个整数,正如@biziclop所说

要检查变量的类型,请使用instanceof

if (x[0] instanceof Integer) 
   System.out.println(x[0] + " is of type Integer")

答案 2 :(得分:4)

您想使用instanceof运算符。

例如:

if(x[0] instanceof Integer) {
 Integer anInt = (Integer)x[0];
 // do this
} else if(x[0] instanceof String) {
 String aString = (String)x[0];
 //do this
}

答案 3 :(得分:4)

不是你问的,但是如果有人想确定数组中允许的对象的类型:

 Oject[] x = ...; // could be Object[], int[], Integer[], String[], Anything[]

 Class classT = x.getClass().getComponentType();