我正在阅读Java:Herbert Schildt的完整参考资料,现在这里有一件事对我来说并不是很清楚.在关于整数的章节中,它说当需要大的整数时应该使用long类型.书中的代码示例:
// Compute distance light travels using long variables
class Light {
public static void main(String args[]) {
int lightspeed;
long days;
long seconds;
long distance;
// approximate speed of light in miles per second
lightspeed = 18600;
days = 1000; // specify number of days here
seconds = days * 24 * 60 * 60; // convert to seconds
distance = lightspeed * seconds; // compute distance
System.out.print("In " + days + " days light will travel about " + distance + " miles.");
}
}
Run Code Online (Sandbox Code Playgroud)
执行控制台为我提供了这样的结果:
"In 1000 days light will travel about 16070400000000 miles."
Run Code Online (Sandbox Code Playgroud)
根据我的逻辑,天和秒的变量也应该是int,而它们的值小于2 147 483 647.
在这个例子中,天= 1000和秒= 86 400 000,因此值不是那么大.
但是当我声明这样的变量时:
int lightspeed, days, seconds;
long distance;
Run Code Online (Sandbox Code Playgroud)
我有奇怪的结果,现在我绝不接受它.
"In 1000 days light will travel about -1367621632 miles."
Run Code Online (Sandbox Code Playgroud)
请帮帮我.
当两个seconds和lightspeed被声明为时int,lightspeed * seconds被计算为ints 的乘法,这会导致溢出(自16070400000000> 2147483647).
你仍然可以让他们为int你投lightspeed或seconds到long,这将强制执行的乘法longS:
distance = (long)lightspeed * seconds;
Run Code Online (Sandbox Code Playgroud)
要么
distance = lightspeed * (long)seconds;
Run Code Online (Sandbox Code Playgroud)