类型不匹配:无法从long转换为int

时间:2013-10-05 11:08:54

标签: java

我有以下代码行

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);

我认为第3行和第4行执行相同的任务, 那么为什么编译器在第4行显示错误“类型不匹配:无法从long转换为int”

请帮忙。

3 个答案:

答案 0 :(得分:12)

那是因为复合赋值运算符执行隐式转换。

来自JLS Compound Assignment Operator

  

E1 op= E2形式的复合赋值表达式等同于E1 = (T) ((E1) op (E2)),其中TE1的类型,但E1仅被评估一次。

如果是二进制+运算符,则必须明确进行转换。完成第4项任务:

intnum = (int)(intnum+longnum);

它会起作用。这就是您的复合赋值表达式的计算结果。

答案 1 :(得分:11)

  

我认为第3行和第4行执行相同的任务,那么为什么编译器在第4行显示错误“类型不匹配:无法从long转换为int”

因为他们不做做同样的事情。复合赋值运算符具有隐式转换。

来自section 15.26.2 of the JLS

  

E1 op= E2形式的复合赋值表达式等同于E1 = (T) ((E1) op (E2)),其中TE1的类型,但E1仅被评估一次。

所以你的第三行更像是:

intnum = (int) (intnum + longnum); 

强制转换是必需的,因为在intnum + longnum表达式中,binary numeric promotionlong arithemtic中执行加法之前应用long,结果为long。没有从int到{{1}}的隐式转换,因此是演员。

答案 2 :(得分:0)

Long id = 50;
Integer sum = Integer.valueOf(Long.toString(id));