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。。。