2

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

3
  • 1
    You can test your second question. Commented May 18, 2010 at 17:59
  • @Vishal: That is how array literals are defined in Java. Commented May 18, 2010 at 18:26
  • @Syntactic: Thanks, I think its been ages I used arrays! ;) Commented May 18, 2010 at 18:36

2 Answers 2

9

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).

Sign up to request clarification or add additional context in comments.

1 Comment

Not exactly; autoboxing does not use new Integer(...), but Integer.valueOf(...) which is slightly different. Note that Integer.valueOf(...) doesn't always return a new Integer object; it has a cache for values between -128 and 127.
0

What happens under the hood is Java compiler adds code like Integer.valueOf(a) in order to convert your int value into an Object.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.