gpt4 book ai didi

Java、Intellij : Replacing numeric overflow expression with one which doesn't overflow

转载 作者:行者123 更新时间:2023-12-01 06:49:49 32 4
gpt4 key购买 nike

我有一个正在运行的计划作业,我想计算过去 30 天的时间。为此,我收到一条警告,表示在表达式中检测到数字溢出。我怎样才能安全地给予 30 天?

@Override
@Scheduled(cron = "0 5 5 * * ?")
public void deleteRepliesAutomatically() {
if(schedulerActive.equals("true")) {
Session session = this.sessionFactory.getCurrentSession();
long now = System.currentTimeMillis();
// Below line gives warning.
long nowMinus1Week = now - (1000 * 60 * 60 * 24 * 30);
Timestamp nowMinus1WeekAsTimeStamp = new Timestamp(nowMinus1Week);
Query query = session.createQuery("from Replies as cm where cm.sortTimeStamp <:limit");
query.setParameter("limit", nowMinus1WeekAsTimeStamp);
List<Replies> repliesList = query.list();
for (Replies replies : repliesList) {
session.delete(replies);
session.flush();
}
}
}

谢谢。

最佳答案

问题在于您的表达式 (1000 * 60 * 60 * 24 * 30) (结果为 2.592.000.000)是一个纯 int 溢出计算( Integer.MAX_VALUE 为 2.147.483.647)。

只需制作例如通过添加 L 将第一个数字变为 long:

(1000L * 60 * 60 * 24 * 30)

这将使用足以容纳该值的long数据类型进行整个计算。

关于Java、Intellij : Replacing numeric overflow expression with one which doesn't overflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269958/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com