将乘法运算的一个操作数转换为long?

时间:2016-07-01 06:27:26

标签: java sonarqube

我将两个数字相乘,即int并存储在long中。但它显示错误,因为, 将此乘法运算的一个操作数强制转换为long。怎么解决这个问题?

 private int milisecPerSecond = 1000;

/**
 * The update interval in seconds.
 */
// Update frequency in seconds
private int updateIntervalInSec = 5;
 /**
 * The update interval.
 */
// Update frequency in milliseconds
private long updateInterval = milisecPerSecond * updateIntervalInSec;

1 个答案:

答案 0 :(得分:6)

首先,这不会导致编译器错误。通常情况下,乘以int数并将结果存储在int。

如果32位宽可以使用有符号的int,可以将数字提取到大约。 20亿。如果您的代码完成了它所说的内容,则会产生200万秒或23天的更新间隔。

如果您真的想要强制进行基于长期的计算,只需投出其中一个因素:

long updateInterval = millisecsPerSecond * (long) updateIntervalInSec;

第二个因素将自动转换。

请注意,仅投射结果是不够的:

private long updateInterval = (long) (milisecPerSecond * updateIntervalInSec);
// THIS WON'T DO AS EXPECTED

因为它会对int进行有问题的计算,然后将当时可能错误的结果转换为long。

Casting是在每本关于Java的书的前三页中描述的内容。如果您对代码质量的认真度足以运行代码质量工具,那么请让您熟悉所用语言的人坐在您旁边。训练有素的新眼睛是一个很好的资源。