Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从long转换为int错误仅在使用简单赋值时发生_Java - Fatal编程技术网

Java 无法从long转换为int错误仅在使用简单赋值时发生

Java 无法从long转换为int错误仅在使用简单赋值时发生,java,Java,Java正在做一些我不理解的事情。如果我有 int sum = 0; long num = 1234; 使用赋值运算符+=可以正常工作 sum += num % 10; 但是,使用简单赋值将导致“无法将long转换为int”错误 为什么会这样???当你做+=这是一个复合赋值,编译器内部有一些机制来计算它。其中,与第一种情况一样,编译器给出了一个错误,因为它是normal语句 JSL介绍了它如何处理复合赋值 在第一种情况下,编译器将代码翻译为 sum += (int) (num % 10);

Java正在做一些我不理解的事情。如果我有

int sum = 0;
long num = 1234;
使用赋值运算符+=可以正常工作

sum += num % 10;
但是,使用简单赋值将导致“无法将long转换为int”错误


为什么会这样???

当你做+=这是一个复合赋值,编译器内部有一些机制来计算它。其中,与第一种情况一样,编译器给出了一个错误,因为它是normal语句

JSL介绍了它如何处理复合赋值

在第一种情况下,编译器将代码翻译为

sum += (int) (num % 10);

所以编译器内部有一个强制转换。因此,不会提示您出错。编译器正在那里完成您的工作:)

这可能是更好(或至少更常见)的副本:。谢谢Suresh。有道理的内部演员
sum += (int) (num % 10);