The following code compiles (with Java 8):
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
But what does it do?
Un
Lets do some examples :
Case -1 :
public static void main(String[] args) {
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
System.out.println(compared);
}
Byte code :
....
16: if_icmpne 23 // comparing 2 integers
....
Case -2 :
public static void main(String[] args) {
Integer i1 = 1000;
Integer i2 = 1000;
//int i2 = 1000;
boolean compared = (i1 == i2);
System.out.println(compared);
}
Bytecode :
...
16: if_acmpne 23 // comparing references
....
So, in case of comparison of Integer
and int
with ==
the Integer
is unboxed to an int
and then comparison happens.
In case of comparing 2 Integers
, the references of 2 Integers
are compared.
It is defined in the JLS #15.21.1:
If the operands of an equality operator are both of numeric type, or one is of numeric type and the other is convertible (§5.1.8) to numeric type, binary numeric promotion is performed on the operands (§5.6.2).
And JLS #5.6.2:
When an operator applies binary numeric promotion to a pair of operands, each of which must denote a value that is convertible to a numeric type, the following rules apply, in order:
- If any operand is of a reference type, it is subjected to unboxing conversion [...]
So to answer your question, the Integer
is unboxed into an int
.
Explanation
When two primitive values are compared using == operator autoboxing does not take place.
When two objects are compared using == operator autoboxing plays role.
When mixed combination is used that is it contains an Object and primitive type and comparison is done using == operator unboxing happens on the Object and is converted to primitive type.
Please go through the below link which will help you get understand detailed about auto-boxing with suitable example.
Refer Link : http://javarevisited.blogspot.in/2012/07/auto-boxing-and-unboxing-in-java-be.html