我将两个数字相乘,即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;
Run Code Online (Sandbox Code Playgroud)
首先,这不会导致编译器错误.通常情况下,乘以int数并将结果存储在int中.
如果32位宽,则带符号的int可以使数字达到约.20亿.如果您的代码完成了所说的内容,则会产生200万秒或23天的更新间隔.
如果你真的想要强制进行基于长期的计算,只需投出其中一个因素:
long updateInterval = millisecsPerSecond * (long) updateIntervalInSec;
Run Code Online (Sandbox Code Playgroud)
第二个因素将自动转换.
请记住,仅仅投射结果是不够的:
private long updateInterval = (long) (milisecPerSecond * updateIntervalInSec);
// THIS WON'T DO AS EXPECTED
Run Code Online (Sandbox Code Playgroud)
因为它将对int进行有问题的计算,然后将当时可能错误的结果转换为long.
在每本关于Java的书的前三页都有描述.如果您对代码质量的认真度足以运行代码质量工具,那么请让您熟悉所用语言的人坐在您旁边.训练有素的新眼睛是一个很好的资源.