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

Sta*_*tar -1 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;
Run Code Online (Sandbox Code Playgroud)

Eik*_*iko 6

首先,这不会导致编译器错误.通常情况下,乘以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的书的前三页都有描述.如果您对代码质量的认真度足以运行代码质量工具,那么请让您熟悉所用语言的人坐在您旁边.训练有素的新眼睛是一个很好的资源.