希望结果 获取30万个计算后的时间插入数据表, 每次时间加上 一分钟
for (int l = 0; l < 300000; l++) {
long temp = date.getTime() + l*6*10000;
Date expireTime1 = new Date(temp);
System.out.println(df.format(expireTime1) + " " + count);
}
//不能计算到
2020-06 算着算着出现负数
-456849184 i==278717 2019-11-06 04:08:50
-456789184 i==278718 2019-11-06 04:09:50
-456729184 i==278719 2019-11-06 04:10:50
推测是越限了 , 但查了一下 long的取值范围 ,并没有出现异常
// 2147483648 int
// 1573441380000 需要
// 9223372036854775807 long
成功计算到 2020-06
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date date = df.parse("2019-11-11 11:03");
for (int l = 0; l < 300000; l++) { long count = l*6; long temp = date.getTime() + count*10000; Date expireTime1 = new Date(temp); System.out.println(df.format(expireTime1) + " " + count); }
想一下,为什么 一个long计算时会越限了,两个long又不会 ,它们最终结果是一致的
long count = l*6; long temp = date.getTime() + count*10000; //long temp = date.getTime() + l*6*10000;
发现我们的L变量是 int类型 ,你看出问题了吗? l*6*10000 超出int的取值范围
正确结果 for (int l = 0; l < 300000; l++) { long temp = (long)l*6*10000 +date.getTime() ; Date expireTime1 = new Date(temp); System.out.println(df.format(expireTime1) + " " + count); } 或者 for (long l = 0; l < 300000; l++) { long temp = l*6*10000 +date.getTime() ; Date expireTime1 = new Date(temp); System.out.println(df.format(expireTime1) + " " + count); }
疑问二: 去除循环时的临时变量 (未解决)
# 优化 避免大量创建临时变量 long count;long temp; for (int l = 0; l < 300000; l++) { count = l*6; temp = date.getTime() + count*10000; Date expireTime1 = new Date(temp); System.out.println(df.format(expireTime1) + " " + count); }
第一个for循环花费 4365
第二个for循环花费 4657
为什么有优化反而不如不优化,知识有限,以后探讨