I\'ve found that java compile has a non-expected behavior regarding assignment and self assignment statements using an int and a float.
The following code block illu
i believe that the explicit i+f
fails because of Narrowing primitive conversion. While in the first case the conversion on the right side passes because it is done according to Compound Assignment rules.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2
The Java Language Specification says:
A compound assignment expression of the form
E1 op= E2
is equivalent toE1 = (T) ((E1) op (E2))
, whereT
is the type ofE1
, except thatE1
is evaluated only once.
So i += f
is equivalent to i = (int) (i + f)
.