int.class在Java中是否等于Integer.class或Integer.TYPE?

让我们假设使用reflection检索Field的声明类型。

以下哪个测试将正确指示是否正在处理intInteger

 Field f = ... Class c = f.getDeclaringClass(); boolean isInteger; isInteger = c.equals(Integer.class); isInteger = c.equals(Integer.TYPE); isInteger = c.equals(int.class); isInteger = ( c == Integer.class); isInteger = ( c == Integer.TYPE); isInteger = ( c == int.class); 

基于f.getDeclaringClass() Field.getType() (而不是f.getDeclaringClass() ),我得到以下内容:

 Type: java.lang.Integer equals(Integer.class): true equals(int.class) : false equals(Integer.TYPE) : false == (Integer.class) : true == (int.class) : false == (Integer.TYPE) : false Type: int equals(Integer.class): false equals(int.class) : true equals(Integer.TYPE) : true == (Integer.class) : false == (int.class) : true == (Integer.TYPE) : true Type: java.lang.Object equals(Integer.class): false equals(int.class) : false equals(Integer.TYPE) : false == (Integer.class) : false == (int.class) : false == (Integer.TYPE) : false 

含义如下:

 Integer.TYPE.equals(int.class) Integer.TYPE == int.class 

这意味着如果我想知道我是在处理int还是Integer ,我可以使用以下任何一个测试:

 isInteger = c.equals(Integer.class) || c.equals(Integer.TYPE); isInteger = c.equals(Integer.class) || c.equals(int.class); isInteger = (c == Integer.class) || (c == Integer.TYPE); isInteger = (c == Integer.class) || (c == int.class ); 

我错过了一个角落案例吗? 如果是,请发表评论。

int.class编译为Integer.TYPE 。 但是,我认为您正在错误地使用Field.getDeclaringClass() ,因为它返回表示声明该字段的类的Class对象。 你想要使用的是Field.getType()