我将两个数字相乘,即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;
答案 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的书的前三页中描述的内容。如果您对代码质量的认真度足以运行代码质量工具,那么请让您熟悉所用语言的人坐在您旁边。训练有素的新眼睛是一个很好的资源。