知道我为什么要在这里将整数字面转换为(Int)吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

在下面的示例中

int i = -128;
Integer i2 = (Integer) i; // compiles

Integer i3 = (Integer) -128; /*** Doesn't compile ***/

Integer i4 = (Integer) (int) -128; // compiles
Integer i4 = -128; // compiles
Integer i5 = (int) -128; // compiles
Integer i6 = (Integer) (-128); // compiles
Integer i7 = (Integer) 0-128; // compiles

-128 (Integer)不可以,但我可以(int) -128

我一直以为-128是的int

i3报错:

cannot find symbol variable Integer

提问于
用户回答回答于

编译器试图减去128(Integer)而不能将-128转换为Integer...。可以:

Integer i3 = (Integer) -128; // doesn't compile
Integer i3 = (Integer) (-128); // compiles

而Bringer 128找到了JLS参考15.16

 CastExpression:
    ( PrimitiveType Dimsopt ) UnaryExpression
    ( ReferenceType ) UnaryExpressionNotPlusMinus

如您所见,转换为基元类型需要任何UnaryExpression,而转换为引用类型则需要UnaryExpressionNotPlusMinus。这些都是在CastExpressionatJLS 15.15

用户回答回答于

我找到了JLS的参考资料:

 CastExpression:
    ( PrimitiveType Dimsopt ) UnaryExpression
    ( ReferenceType ) UnaryExpressionNotPlusMinus

您需要将强制转换更改为基本类型:

... (int) -128;

Or you can change the expression to the right of the cast to a non-plus-minus unary expression:

... (Integer) (-128);  // Either
... (Integer) 0 - 128; // Or

扫码关注云+社区