java - int.class 是否等于 Java 中的 Integer.class 或 Integer.TYPE?

标签 java reflection primitive-types boxing

假设我们使用反射来检索 Field 的声明类型。

以下哪些测试可以正确地指出一个是在处理 int 还是 Integer

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);

最佳答案

基于 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 );

是否有我遗漏的角落案例?如果是,请发表评论。

关于java - int.class 是否等于 Java 中的 Integer.class 或 Integer.TYPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082997/

相关文章:

java - 如何包含 Wicket Palette 的默认 css 文件?

java - 找不到枚举时的枚举类映射问题

java - 两个迭代器抛出 ConcurrentModificationException

java - 为什么我可以在 InvocableHandler 的 invoke() 方法中调用 proxy.getClass() ?

Java 对 double 、整数和转换基础知识的困惑

objective-c - Objective-C 中的术语 "scalar"和 "primitive"之间有区别吗?

Java - 学习顺序

java - Java中通过反射来转换对象

c# - 从结构的常量属性中获取值的集合

C - 将两个 uint32_t 合并为一个 double