compound-assignment operator and type casting

September 13, 2008

We’ve been learning since we first printed “hello world” that

i += 1

expands to

i = i + 1

Well, here’s a little problem to shake the faith.

byte i = 1;

i  = i + 1;


Being java programmers worth our salt, it wouldnt take much to identify the compilation error.

Error: Possible loss of precision

So how do we explain that the next code snippet prints the value 2?

byte i =1;

i += 1;


Here’s the secret: i += 1 is not same as i = i + 1

When you do an assignment (the first code snippet), java enforces type checking because the LHS and RHS may very well be independent of each other.

But the compound-operator is more like an incremental operator. The += modifies the value of the variable involved, rather than assigning a new value to the variable. When you modify a byte, you expect a byte as the result. To make life easier, java does an implicit type conversion for compound-operators because they are modifiers.

Have fun!