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 illustrates the error.
int i = 3;
float f = 0.1f;
i += f; // no compile error, but i = 3
i = i + f; // COMPILE ERROR
-
In the self assignment
i += fthe compile does not issue an error, but the result of the exaluation is an int with value3, and the variableimaintains the value3. -
In the
i = i + fexpression the compiler issues an error with “error: possible loss of precision” message.
Can someone explain this behavior.
EDIT: I’ve posted this code block in https://compilr.com/cguedes/java-autoassignment-error/Program.java
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2
The Java Language Specification says:
So
i += fis equivalent toi = (int) (i + f).