Integer.class与int.class

use*_*123 32 java reflection primitive

有什么区别Integer.class,Integer.TYPEint.class

适合我

  1. Integer.class 是Integer(Wrapper)类对象的引用
  2. 但什么是那么int.classint不是一类,这是一个基本类型.那Integer.TYPE指的是什么?

ysh*_*vit 29

Integer.class就像你说的那样,是Class对该Integer类型的对象的引用.

int.class是,相似性,Classint类型的对象的引用.你是对的,这听起来不对; 原语都有一个Class对象作为特例.如果你想区分foo(Integer value)和之间的区别,它对于反射是有用的foo(int value).

Integer.TYPE(不Integer.type,记住你)只是一个捷径int.class.

您可以通过一个简单的程序了解这一点:

public class IntClasses {
  public static void main(String[] args) {
    Class<Integer> a = int.class;
    Class<Integer> b = Integer.TYPE;
    Class<Integer> c = Integer.class;

    System.out.println(System.identityHashCode(a));
    System.out.println(System.identityHashCode(b));
    System.out.println(System.identityHashCode(c));
  }
}
Run Code Online (Sandbox Code Playgroud)

示例输出(每次都会有所不同,但前两个将始终相同,第三个几乎总是不同):

366712642
366712642
1829164700
Run Code Online (Sandbox Code Playgroud)

  • 这怎么是捷径呢,打字确实要花更长的时间。 (7认同)

Evg*_*eev 22

来自java.lang.Class.isPrimitiveAPI

有九个预定义的Class对象来表示八种基本类型和void.它们由Java虚拟机创建,并且与它们表示的基本类型具有相同的名称,即boolean,byte,char,short,int,long,float和double.

这些对象仅能通过下列公共静态最终变量来访问java.lang.Boolean.TYPE,java.lang.Integer.TYPE等等

  • 最后一句话可能在javadocs中,但这是错误的.:)您也可以通过`int.class`,`boolean.class`等访问这些对象.我不知道该功能何时进入,所以也许文档已经过时了? (24认同)
  • @EvgeniyDorofeev这应该是什么答案?问题是**Integer.class,Integer.TYPE和int.class之间有什么区别** (7认同)
  • 我同意,有趣的是,为什么他们这样说,它来自Java 7 (3认同)