Java 与Double.TYPE和Double.class的比较

Java 与Double.TYPE和Double.class的比较,java,class,reflection,types,primitive,Java,Class,Reflection,Types,Primitive,实际上这不是一个问题,因为我会马上给出答案,所以你不会爱上同一件事: 我想检查(使用反射)一个字段是原语还是包装类之一 我使用cl.isPrimitive()和类似c==Boolean.TYPE的比较进行了检查,但根据我的调试器,Boolean.TYPE.toString返回“Boolean”,而不是“Boolean”。Double.TYPE==Double.class将返回true Double.class!=Double.TYPE也将返回true 它们(double.class和double

实际上这不是一个问题,因为我会马上给出答案,所以你不会爱上同一件事:

我想检查(使用反射)一个
字段是原语还是包装类之一


我使用
cl.isPrimitive()
和类似
c==Boolean.TYPE
的比较进行了检查,但根据我的调试器,Boolean.TYPE.toString返回“Boolean”,而不是“Boolean”。

Double.TYPE==Double.class
将返回
true

Double.class!=Double.TYPE
也将返回
true

它们(double.class和double.TYPE)以某种方式表示相同的东西,不要问我为什么

如果要与进行比较,请与
Double.class
进行比较
如果要与
double
进行比较,请与
double.class
double.TYPE
进行比较

虽然我没有对所有的原语进行测试,但对所有其他原语及其包装器应该是相同的


我希望这将至少节省我写这篇文章所花费的时间。

在javadoc中这样说,所有包装器类的
.TYPE
字段都是基本类型的类。另外,这并不是StackOverflow的用途……是的,我知道,但至少让人困惑
int.class
在字节码级别编译为
Integer.TYPE
(我无法理解为什么他们不简单地使用基元类常量池条目,但事实就是如此),这也适用于所有其他基元类型(包括
void
void.class
编译为
void.TYPE
)。所以它们是等价的,一点也不
Double。class
Double
s的类
Double。TYPE
Double
s的类。我以前用过这个,我发现它非常简单。考虑到你回答了自己的“问题”,显然你也明白了。@ValekHalfHeart:是的,经过一些探索和尝试。这很简单,只要知道int.class==Integer.TYPE。。。