2

For example:

int a = 10;
a += 1.5;

This runs perfectly, but

a = a+1.5;

this assignment says Type mismatch: cannot convert from double to int. So my question is: what is the difference between += operator and = operator. Why the first assignment didn't says nothing, but second will. Please explain to me. Just I want to know whether I can use the first assignment to all place or not.

FThompson
  • 28,352
  • 13
  • 60
  • 93
Gunaseelan
  • 14,415
  • 11
  • 80
  • 128

4 Answers4

9
int a = 10;
a += 1.5;

is equivalent to:

int a = 10;
a = (int) (a + 1.5);

In general:

x += y; is equivalent to x = (type of x) (x + y);


See 15.26.2. Compound Assignment Operators

Eng.Fouad
  • 115,165
  • 71
  • 313
  • 417
9

From the Java Language Specification section 15.26.2:

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 the most important difference (in terms of why the second version doesn't compile) is the implicit cast back to the type of the original variable.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194
2

Check this link

int a = 10;
a += 1.5;

will be treated as

int a=10;
a=(int)(a+1.5);

As you can found in this link expressions

Pragnani
  • 20,075
  • 6
  • 49
  • 74
1

In case of

a += 1.5;

implicit auto boxing is done

where as here

a = a+1.5;

you are explicitly adding a int variable to a float/double variable

so to correct it

a = a+(int)1.5;

or

a = (int) (a+1.5);
Sudhakar
  • 4,823
  • 2
  • 35
  • 42