Integer.class,int.class和Integer.TYPE有什么区别?我对这三者感到困惑.
无论i是int或Integer:
Integer.class.isInstance(i) 回报 trueint.class.isInstance(i) 回报 falseInteger.TYPE.isInstance(i) 回报 false我们明白了isInstance.
public boolean isInstance(Object obj)确定指定的Object是否与此Class表示的对象分配兼容.
它需要一个Object参数,而不是一个原始类型.int传入的任何内容都将被装箱,Integer因此可以将其传递给方法.
Integer.class是一个类文字,并与引用类型一起使用,它是Class对该类对象的引用.
Integer此方法看到的对象当然是Integer类的实例,因此Integer.class.isInstance(i)返回true.
然而,int.class与Integer.TYPE每个代表int原始类型,而不是Integer阶级,一个Integer是不是int,尽管Java的通常使用它们互换,由于装箱和拆箱的事实.这解释了和的两个false输出.int.class.isInstance(i)Integer.TYPE.isInstance(i)
根据Javadocs的Integer说法,Integer.TYPE自1.1版以来一直存在.
当类文字语法可用时,需要类对象作为方法参数的Java API更容易使用.
类文字使得使用反射变得非常容易,这在Java 1.1中也是新的.
目前尚不清楚为什么Integer.TYPE存在与参考类文字一致地int.class表示int原始类型.它们在比较它们时是等效的并且==产量true.