Reputation: 13321
Would (1) int a; new Object[] {a}
be the same as (2) new Object[] {new Integer(a)}
?
If I do the 1st one, will (new Object[]{a})[0]
give me an Integer
?
thank you
Upvotes: 2
Views: 190
Reputation: 10961
Yes and yes.
You can't actually put an int
into an Object[]
. What you're doing is making use of a feature of Java called autoboxing, wherein a primitive type like int
is automatically promoted to its corresponding wrapper class (Integer
in this case) or vice versa when necessary.
You can read more about this here.
Edit:
As Jesper points out in the comment below, the answer to your first question is actually not "yes" but "it depends on the value of a
". Calling the constructor Integer(int)
as you do in (2) will always result in a new Integer
object being created and put into the array.
In (1), however, the autoboxing process will not use this constructor; it will essentially call Integer.valueOf(a)
. This may create a new Integer
object, or it may return a pre-existing cached Integer
object to save time and/or memory, depending on the value of a
. In particular, values between -128 and 127 are cached this way.
In most cases this will not make a significant difference, since Integer
objects are immutable. If you are creating a very large number of Integer
objects (significantly more than 256 of them) and most of them are between -128 and 127, your example (1) will be probably be faster and use less memory than (2).
Upvotes: 9
Reputation: 31795
What happens under the hood is Java compiler adds code like Integer.valueOf(a) in order to convert your int value into an Object.
Upvotes: 0