Is it guaranteed that new Integer(i) == i in Java?
Posted
by polygenelubricants
on Stack Overflow
See other posts from Stack Overflow
or by polygenelubricants
Published on 2010-05-14T05:06:27Z
Indexed on
2010/05/14
5:14 UTC
Read the original article
Hit count: 189
Consider the following snippet:
int i = 99999999;
byte b = 99;
short s = 9999;
Integer ii = Integer.valueOf(9); // should be within cache
System.out.println(new Integer(i) == i); // "true"
System.out.println(new Integer(b) == b); // "true"
System.out.println(new Integer(s) == s); // "true"
System.out.println(new Integer(ii) == ii); // "false"
It's obvious why the last line will ALWAYS prints "false"
: we're using ==
reference identity comparison, and a new
object will NEVER be ==
to an already existing object.
The question is about the first 3 lines: are those comparisons guaranteed to be on the primitive int
, with the Integer
auto-unboxed? Are there cases where the primitive would be auto-boxed instead, and reference identity comparisons are performed? (which would all then be false
!)
© Stack Overflow or respective owner