请帮我解决为什么不起作用的问题。 (这不是一个实际问题,这是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.(请参阅本章中更下方的表。)