Dangerous auto(un)boxing

Today I've stumpled above a serious auto(un)boxing problem:

Number aNumber = aBooleanValue ? getIntegerObj() : getDoubleObj();

Method getIntegerObj returns an Integer, getDoubleObj a Double. Although aBooleanValue was true while debugging, aNumber contained a Double object after execution. The only explanation I had was an implicit autounboxing and immediat autoboxing. But what if the called get*Obj method returns null?

Even more strange, although autoboxing and autounboxing should be marked as warnings, nothing is marked.

Mike

7 comments
Comment actions Permalink

I fail to reproduce your example. No unboxing should be performed in this context.
Probably this is a bug in the compiler you are using?

0
Comment actions Permalink

Try out this class

public class Main {

// Static =================================================================

public static void main(String[] args) {
new Main(true).print();
}

// Fields =================================================================

private final boolean useInt;

// Setup ==================================================================

public Main(boolean useInt) {
this.useInt = useInt;
}

// Utils ==================================================================

private void print() {
final Number number = useInt ? getInteger() : getDouble();
System.out.println(number.getClass().getName());
}

private Integer getInteger() {
return new Integer(11);
}

private Double getDouble() {
return new Double(5.5);
}
}

with SUN's JDK 1.5.0_07.

Mike

0
Comment actions Permalink

Yep, the spec says about binary numeric promotion that may cause autounboxing...

0
Comment actions Permalink

... which also exposes a little bug in IDEA:

final Number number = useInt ? getInteger() : (Number)getDouble();

It thinks that the cast to Number is redundant... but it isn't. ;)

Maybe related to http://www.jetbrains.net/jira/browse/IDEA-3452 (just a guess as this also involves unboxing) ?

0
Comment actions Permalink

Hmm, does this forum have a built-in back-in-time device?

My Last Post -> Posted: Jul 5, 2006 11:57 AM
The one before -> Posted: Jul 5, 2006 12:02 PM

When is JB going to sell it? :)

0
Comment actions Permalink

Yep, the spec says about binary numeric promotion
that may cause autounboxing...


Well, then this is another example of avoiding autounboxing where possible, because subtle bugs can be introduced.

0

Please sign in to leave a comment.