int类型过大变成负数
博客专区 > tryme 的博客 > 博客详情
int类型过大变成负数
tryme 发表于2个月前
int类型过大变成负数
  • 发表于 2个月前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0
摘要: 引发的问题及解决方案

计算机存储系统使用补码标识,int类型占32位,首位是符号位:0表示正数,1表示负数。

  • 正数补码与原码相同
  • 负数补码除符号位其余各位与原码取反,然后加1

最近工作看到一个之前的人写的日期工具类,本来想用Apache的commons包的DateUtils工具类,但是没有找到想要的方法,转而求其次使用封装的工具类,结果遇到一个问题。

        需求:给定一个Date对象,找到特定天数后的日期时间

工具类的方法代码是这样写的:

public static Date datetimeAddDay(Date datetime, int day) {
	datetime.setTime(datetime.getTime() + day * 24 * 60 * 60 * 1000);
	return datetime;
}

猛的一看,并没有什么不对,结果运行时日期不对,写个测试类跑了一下,大吃一惊!!!

@Test
public void testDatetimeAddDay() {
    Date datetime = new Date();
    System.out.println("当前时间:" + datetime);
    Date datetimeAddDay = DateUtil.datetimeAddDay(datetime, 30);
    System.out.println("30天后:" + datetimeAddDay);
}

运行结果:

这时间还给我倒回去了,原来是工具类的方法加的毫秒数超过int类型最大值了 2的31次方-1,符号位成了1,整体变为负数。所以工具类中运算的毫秒数使用long类型即可!!!

标签: Java int类型范围
共有 人打赏支持
粉丝 0
博文 7
码字总数 1801
×
tryme
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: