请帮我解决为什么不起作用的问题。 (这不是一个实际问题,这是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

最佳答案

这个

(short)iBoxed


是一个不依赖于上下文的独立表达式。您尝试做的是将Integer参考值转换为short基本值。 That's just not a casting context that is allowed.(请参阅本章中更下方的表。)

10-06 02:14