Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does int.class equal Integer.class or Integer.TYPE in Java?

Tags:

Let's imagine one retrieves the declaring type of a Field using reflection.

Which of the following tests will correctly indicate whether one is dealing with an int or an Integer?

Field f = ... Class<?> c = f.getDeclaringClass(); boolean isInteger;  isInteger = c.equals(Integer.class); isInteger = c.equals(Integer.TYPE); isInteger = c.equals(int.class);  isInteger = ( c == Integer.class); isInteger = ( c == Integer.TYPE); isInteger = ( c == int.class); 
like image 610
Jérôme Verstrynge Avatar asked Aug 16 '11 18:08

Jérôme Verstrynge


People also ask

What is the int class in Java?

Integer class is a wrapper class for the primitive type int which contains several methods to effectively deal with an int value like converting it to a string representation, and vice-versa. An object of the Integer class can hold a single int value.

Is int and Integer the same in Java?

In Java, int is a primitive data type while Integer is a Wrapper class. int, being a primitive data type has got less flexibility. We can only store the binary value of an integer in it. Since Integer is a wrapper class for int data type, it gives us more flexibility in storing, converting and manipulating an int data.

What is the difference between Integer class and int data type?

A int is a data type that stores 32 bit signed two's compliment integer. On other hand Integer is a wrapper class which wraps a primitive type int into an object. int helps in storing integer value into memory. Integer helps in converting int into object and to convert an object into int as per requirement.

Is int a class type?

class as int is not a class, it's a primitive type.


1 Answers

Based on Field.getType() (instead of f.getDeclaringClass()), I get the following:

Type: java.lang.Integer  equals(Integer.class): true equals(int.class)    : false equals(Integer.TYPE) : false == (Integer.class)   : true == (int.class)       : false == (Integer.TYPE)    : false  Type: int  equals(Integer.class): false equals(int.class)    : true equals(Integer.TYPE) : true == (Integer.class)   : false == (int.class)       : true == (Integer.TYPE)    : true  Type: java.lang.Object  equals(Integer.class): false equals(int.class)    : false equals(Integer.TYPE) : false == (Integer.class)   : false == (int.class)       : false == (Integer.TYPE)    : false 

Meaning the following is true:

Integer.TYPE.equals(int.class) Integer.TYPE == int.class 

Meaning if I want to find out whether I am dealing with an int or an Integer, I can use any of the following tests:

isInteger = c.equals(Integer.class) || c.equals(Integer.TYPE); isInteger = c.equals(Integer.class) || c.equals(int.class); isInteger = (c == Integer.class) || (c == Integer.TYPE); isInteger = (c == Integer.class) || (c == int.class ); 

Is there a corner case I am missing? If yes, please comment.

like image 115
Jérôme Verstrynge Avatar answered Oct 04 '22 15:10

Jérôme Verstrynge