Компилятор пытается вычесть 128
из (Integer)
вместо приведения -128
к Integer
.Добавьте ()
, чтобы исправить это
Integer i3 = (Integer) -128; // doesn't compile
Integer i3 = (Integer) (-128); // compiles
Согласно BoltClock в комментариях приведение к int
работает как задумано, потому что это зарезервированное слово и поэтому не может быть интерпретировано как идентификатор, которыйимеет смысл для меня.
И Bringer128 нашел ссылку JLS 15.16 .
<i><b>CastExpression:
( PrimitiveType Dims<sub>opt</sub> ) UnaryExpression
( ReferenceType ) UnaryExpressionNotPlusMinus</i></b>
Как видите, приведение к примитивному типу требует любого UnaryExpression
,тогда как приведение к ссылочному типу требует UnaryExpressionNotPlusMinus
.Они определены непосредственно перед CastExpression в JLS 15.15 .