Type mismatch: cannot convert from long to int

前端 未结 2 713
离开以前
离开以前 2021-01-20 22:06

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          


        
2条回答
  •  半阙折子戏
    2021-01-20 22:58

    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 to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 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.

提交回复
热议问题