我有以下声明:
long result = a * b * c;
Run Code Online (Sandbox Code Playgroud)
这会导致变量结果溢出.那样做:
long result = (long)a * b * c;
Run Code Online (Sandbox Code Playgroud)
但是当它们崩溃时,它们不会:
long result = a;
result *= b;
result *= c;
Run Code Online (Sandbox Code Playgroud)
a和b的类型是int.
有人可以解释为什么会这样吗?在前两种情况下,Java是否将中间结果存储在临时内部int变量中?
C和C++的行为方式也一样吗?
假设a * b * c适合a long,但a * b不适合int-
a * b是临时的int.long在每个点上乘以值.long在每个点上乘以值.而且,是的,C和C++也都这样工作; 虽然根据不同的平台,他们可能有两种不同的长度int和long.