Java Assignment Operator [i += j] is not Same as [i = i + j]

We all have used syntax’s like i += j and i = i + j thousands of times in our day-to-day programming. At first sight, they both look similar. In fact, they will result in the same output in almost all of the cases in practical cases.

But, to surprise you they are not similar. In run-time, they are treated differently when i and j are of different types.

1. Problem

Let’s look at the example below:

int i = 5;
       
double d1 = (double) i + 4.5; //necessary to satisfy the compiler
i += 4.5;
 
System.out.println(i);
System.out.println(d1);

The program output:

9
9.5

Weird. Isn’t it? Both are expected to be the same as the operation is same. Why do they have different values? Let’s find out.

2. Reason

Java language specification says the following:

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

So effectively our original example code can be re-written as below:

int i = 5;
    
double d1 = (double) i + 4.5;    
i = (int)(i + 4.5);     //Result converted to int
 
System.out.println(i);
System.out.println(d1);

So the value 9 is nothing but a result of loss of precision while converting from double to int.

3. Conclusion

Always use the compound assignment operator [i += j] very carefully. You should use it only when you are dealing with similar data types. In different data types, results can be incorrect.

Happy Learning !!

References

https://stackoverflow.com/questions/8710619/java-operator
https://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.26.2

Sourcecode on Github

Comments

Subscribe
Notify of
guest

4 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments

About Us

HowToDoInJava provides tutorials and how-to guides on Java and related technologies.

It also shares the best practices, algorithms & solutions and frequently asked interview questions.