如果在Java中具有整数值的运算,我们需要注意int下溢和溢出条件。考虑到以下事实:在Java中,int数据类型是32位带符号的二进制补码整数,最小值为-2,147,483,648,最大值为2,147,483,647。如果某个值超出可能的最大值,则该值将返回最小值并从该最小值继续。以类似的方式,它的值小于最小值。请看以下示例。
public class Tester {
public static void main(String[] args) {
//方案1:
//将int值分配给long导致溢出
long MICROSECONDS_A_DAY = 24 * 60 * 60 * 1000 * 1000;
System.out.println(MICROSECONDS_A_DAY);
//方案2:
//分配长值不会导致溢出
MICROSECONDS_A_DAY = 24L * 60 * 60 * 1000 * 1000;
System.out.println(MICROSECONDS_A_DAY);
}
}输出结果
500654080 86400000000
尽管我们使用了long变量,但在方案1中,乘法操作基于int,导致int溢出。结果,输出不正确。
在方案2中,我们将乘法运算强制为基于所属的,从而得出正确的结果。