编译器试图减去
128从
(Integer)代替铸造
-128来
Integer。添加
()修复
Integer i3 = (Integer) -128; // doesn't compileInteger i3 = (Integer) (-128); // compiles
根据BoltClock的评论,强制转换
int按预期工作,因为它是保留字,因此不能解释为标识符,这对我来说很有意义。
Bringer128找到了JLS参考15.16。
_**Castexpression: (PrimitiveType Dims opt)一元表达式 (ReferenceType)UnaryexpressionNotPlusMinus**_
如您所见,强制转换为基本类型需要任何
Unaryexpression,而强制转换为引用类型需要
UnaryexpressionNotPlusMinus。它们在JLS
15.15的Castexpression之前定义。



