示例:
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()
吗? (如果是,怎么样?),还是我还用别的东西?
答案 0 :(得分:5)
int
和Integer
之间存在差异,只有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();