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);
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.
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.
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.
class as int is not a class, it's a primitive type.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With