一个关于int值越界的问题
来源:互联网 发布:淘宝普拉松自动饮水器 编辑:程序博客网 时间:2024/04/28 08:44
一个关于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类型的,最大值为
Java编译器只会做静态的语法检查,当一个值显示的大于这个最大值时会报错,例如222222222222222222,但是当在计算表达式时,编译器是发现不了越界的,只有在运行的时候发生自动截断。
解决方法,把3600改为3600L即可。
1 1
- 一个关于int值越界的问题
- 关于越界的问题
- 关于Java数组越界的一个诡异问题【leetcode204】
- 关于数据类型的一个小问题 (int) (int &) (int ) &
- 一个越界的的问题
- 关于下标越界的问题
- 关于数组的越界问题
- 关于内存越界的问题
- 关于向量越界的问题
- 关于strcpy 和数组越界的问题
- 关于MFC的CString 访问越界问题
- 关于C++内存越界访问的问题
- 关于越界问题
- 一个数组越界问题 数组越界
- 一个关于指针的问题 int (**def)[3]的解析
- 关于一个数组越界之后的死循环
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- 7 用gradle 编译 开源项目源码
- 这样的外衣值得拥有
- 关于 android studio 切换 git 账号
- x86 linux内核栈溢出一则
- python中的散点图还可以这么画
- 一个关于int值越界的问题
- 线程创建与C/C++运行时库函数的笔记
- C语言--指针与数组
- 一篇很好的Touch事件分发机制讲解
- 展示两种WCF服务通信方式
- linux schedule and queue
- MySql优化之my.ini 中文配置详解
- usb hub
- 增量数据下发整合成全量表的程序分享