In the following example
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
I can’t cast -128 with (Integer) but I can cast (int) -128.
I always thought -128 was of int type and casting it with (int) should be redundant.
The error on the line with i3 is
cannot find symbol variable Integer
I tried this with Java 6 update 29 and Java 7 update 1.
EDIT: You get the same behavior with +128 instead of -128. It does appear to be confusion between unary and binary operators.
The compiler tries to subtract
128from(Integer)instead of casting-128toInteger. Add()to fix itAccording to BoltClock in the comments the cast to
intworks as intended, because it is a reserved word and therefore can’t be interpreted as an identifier, which makes sense to me.And Bringer128 found the JLS Reference 15.16.
CastExpression: ( PrimitiveType Dimsopt ) UnaryExpression ( ReferenceType ) UnaryExpressionNotPlusMinusAs you can see, casting to a primitive type requires any
UnaryExpression, whereas casting to a reference type requires aUnaryExpressionNotPlusMinus. These are defined just before the CastExpression at JLS 15.15.