File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Autoboxing/unboxing conundrum Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Autoboxing/unboxing conundrum" Watch "Autoboxing/unboxing conundrum" New topic

Autoboxing/unboxing conundrum

Matthew Alesi
Ranch Hand

Joined: Sep 13, 2006
Posts: 38
I thought I understood the ins and outs of auto(un)boxing, until I thought of this simple situation:

When this code runs it outputs "true." I guessed that it would output "false," since I assumed that i would be autoboxed into a new Integer, and that the two Integer objects (their values being >127) would be separate. Why does this example seem to prefer the unboxing over the boxing? What is the rule?


Current CS undergrad
SCJP 5.0
Keith Lynn
Ranch Hand

Joined: Feb 07, 2005
Posts: 2398
Because one of the operands of == is a primitive, the wrapper is autounboxed to a primitive, and the comparison is made.
Franz Fountain
Ranch Hand

Joined: Nov 15, 2006
Posts: 58
Hi Matthew,

I suggest looking at the "Chew on this!" thread. I have a similar question.

Satish Kota
Ranch Hand

Joined: Feb 08, 2006
Posts: 88
For reference, section 5.6.2 of the Java Language Specification defines binary numeric promotion.

5.6.2 Binary Numeric Promotion
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, using widening conversion (�5.1.2) to convert operands as necessary:

* If any of the operands is of a reference type, unboxing conversion (�5.1.8) is performed. Then:
* If either operand is of type double, the other is converted to double.
* Otherwise, if either operand is of type float, the other is converted to float.
* Otherwise, if either operand is of type long, the other is converted to long.
* Otherwise, both operands are converted to type int.

After the type conversion, if any, value set conversion (�5.1.13) is applied to each operand.

Binary numeric promotion is performed on the operands of certain operators:

* The multiplicative operators *, / and % (�15.17)
* The addition and subtraction operators for numeric types + and - (�15.18.2)
* The numerical comparison operators <, <=, >, and >= (�15.20.1)
* The numerical equality operators == and != (�15.21.1)
* The integer bitwise operators &, ^, and | (�15.22.1)
* In certain cases, the conditional operator ? : (�15.25)

SCJP 5.0 77%
Matthew Alesi
Ranch Hand

Joined: Sep 13, 2006
Posts: 38
Thanks a ton, this clears a lot up!!
I agree. Here's the link:
subject: Autoboxing/unboxing conundrum
It's not a secret anymore!