Java:自动拆箱与铸造相结合

时间:2014-09-29 15:07:20

标签: java casting autoboxing

请帮助我解决为什么这不起作用。 (这不是一个实际问题,它是OCPJP考试的精神练习。)

public class ImplicitConversions {

Integer iBoxed;
short sPrimitive = (short)iBoxed;

}

//编译错误:不兼容的类型;要求:简短,发现:整数

我假设编译器尝试在没有(或之前)拆箱的情况下首先进行投射,而例如算术运算(iBoxed + iBoxed)将首先取消装箱。因此,可以肯定地说,自动装箱/拆箱在操作顺序(一元,算术,关系,逻辑,条件,分配)中具有其位置,它究竟在哪里?

我一直在阅读下面的源代码转换(为了确保我与1.6兼容),但是这个让我望而却步。谢谢。 http://docs.oracle.com/javase/specs/jls/se5.0/html/conversions.html#20232

3 个答案:

答案 0 :(得分:6)

这个

(short)iBoxed

是一个独立的表达式,不依赖于它的上下文。您要做的是将Integer引用值转换为short原始值。 That's just not a casting context that is allowed.(参见本章后面的表格。)

答案 1 :(得分:2)

Integer有一个方法shortValue()。请改用:

short sPrimitive = iBoxed.shortValue();

答案 2 :(得分:2)

自动装箱/拆箱表达式不能与更广泛或更窄范围的演员组合。

但是,您可以重复播放iBoxed变量:

short sPrimitive = (short) (int) iBoxed;

首先iBoxed变量自动取消装箱到int,然后int转换为short