类型不匹配:无法从long转换为int
我有以下几行代码
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”
请帮忙。
那是因为复合赋值运算符执行隐式转换。
来自JLS化合物分配操作员 :
forms
E1 op= E2
的复合赋值表达式等效于E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,除了E1
仅被评估一次。
在二元+
运算符的情况下,您必须明确地进行转换。 完成第4项任务:
intnum = (int)(intnum+longnum);
它会起作用。 这是您的复合赋值表达式的计算结果。
我认为第3行和第4行执行相同的任务,那么为什么编译器在第4行显示错误“类型不匹配:无法从long转换为int”
因为他们不做同样的事情。 复合赋值运算符具有隐式转换。
从JLS第15.26.2节 :
forms
E1 op= E2
的复合赋值表达式等效于E1 = (T) ((E1) op (E2))
,其中T
是E1
的类型,除了E1
仅被评估一次。
所以你的第三行更像是:
intnum = (int) (intnum + longnum);
intnum + longnum
是必需的,因为在表达式intnum + longnum
,在long
arithemtic中执行加法之前应用二进制数字提升 ,结果为long
。 没有从long
到int
隐式转换,因此是强制转换。