I had the following lines of code
long longnum = 555L;
int intnum = 5;
intnum+=longnum;
intnum= intnum+longnum; //Type mismatch: cannot convert from long to int
System.out.println("value of intnum is: "+intnum);
I think line-3 and line-4 do same task, then why compiler showing error on line-4 "Type mismatch: cannot convert from long to int"
please help.
I think line-3 and line-4 do same task, then why compiler showing error on line-4 "Type mismatch: cannot convert from long to int"
Because they don't do the same thing. Compound assignment operators have an implicit cast in them.
From section 15.26.2 of the JLS:
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 your third line is more like:
intnum = (int) (intnum + longnum);
The cast is required because in the expression intnum + longnum
, binary numeric promotion is applied before addition is performed in long
arithemtic, with a result of long
. There's no implicit conversion from long
to int
, hence the cast.
See more on this question at Stackoverflow