一个关于int值越界的问题

一个关于int值越界的问题

在一个程序中突然爆出一个时间戳不是按照预设的按照天来增长的,有时间时间戳会跑到以前的一个日期,关于这个时间戳错乱的问题调试了好久,终于发现是int值越界的问题。

原始代码如下:

package test;

public class Test1 {

    public static void main(String[] args) {
        for (int i = 0; i < 200; ++i ){
            long ts = 1L + 3600 * 24 * 1000 * i;
            System.out.println(ts);
        }
    }   
}

测试结果如下:

1
86400001
172800001
……..
1814400001
1900800001
1987200001
2073600001
-2134967295
-2048567295
-1962167295
-1875767295
-1789367295
-1702967295
-1616567295

从上面的结果可以清晰的看出,int值 3600 * 24 * 1000 * i 会发生越界,因为Java的数字默认是int类型的,最大值为

2311
所以,当值超过这个最大值事会发生截断,变成一个负值。
Java编译器只会做静态的语法检查,当一个值显示的大于这个最大值时会报错,例如222222222222222222,但是当在计算表达式时,编译器是发现不了越界的,只有在运行的时候发生自动截断。
解决方法,把3600改为3600L即可。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页