What does int.class mean

前端 未结 3 640
小鲜肉
小鲜肉 2020-12-06 05:38

In java int, float and etc., are primitive types. Wrapper classes are used in case we need to use it with generics. But still the following declaration works in java,

<
相关标签:
3条回答
  • 2020-12-06 06:01

    int.class is same type as Class<Integer> as per the specifications.

    From Docs:

    The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects.

    From JLS 15.8.2:

    15.8.2. Class Literals

    A class literal is an expression consisting of the name of a class, interface, array, or primitive type, or the pseudo-type void, followed by a '.' and the token class.

    The type of C.class, where C is the name of a class, interface, or array type , is Class<C>.

    The type of p.class, where p is the name of a primitive type, is Class<B>, where B is the type of an expression of type p after boxing conversion.

    The type of void.class is Class<Void>.

    It is a compile-time error if the named type is a type variable or a parameterized type or an array whose element type is a type variable or parameterized type.

    It is a compile-time error if the named type does not denote a type that is accessible and in scope at the point where the class literal appears.

    A class literal evaluates to the Class object for the named type (or for void) as defined by the defining class loader of the class of the current instance.

    0 讨论(0)
  • 2020-12-06 06:07

    A primitive becoming an Object

    For primitives, there are Class objects available as constants named TYPE in the corresponding wrapper classes -- i.e. int.class is changed to java.lang.Integer.TYPE . For other types, the compiler creates a private member variable in the class being compiled to hold the Class object, and generates code to initialize that member using Class.forName() .

    Found some discussion

    And a nice discussion here and your example also covered in this link.

    A few words from there :

    how can a Class be a primitive? Let's confuse things a bit more. We can access the Class object representing a defined class by coding, say:

    Equation.class // returns the Equation Class object
    

    But, we can also say:

    int.class
    

    obtain a Class object whose name is "int". Note we have not sent the getClass() method to an object; we have used the reserved word for a built-in primitive type (int) and, using dot notation, accessed its class "field." And this returns a Class object!

    0 讨论(0)
  • 2020-12-06 06:07

    A class literal is an expression consisting of the name of a class, interface, array, or primitive type, or the pseudo-type void, followed by a `.' and the token class.

    1. An enum is a kind of class and an annotation is a kind of interface.
    2. Every array also belongs to a class that is reflected as a Class object that is shared by 3. all arrays with the same element type and number of dimensions.
    3. The primitive Java types (boolean, byte, char, short, int, long, float, and double), and
    4. The keyword void are also

    represented as Class objects.

    So System.out.println(int.class); will print int whereas System.out.println(Integer.class); will print class java.lang.Integer.

    0 讨论(0)
提交回复
热议问题