随笔 - 809  文章 - 0 评论 - 144 阅读 - 770万

最终结论:

(180 * 24 * 60 * 60) 这种计算表达式在 Java中是默认以 Integer类型来的,若不超过 Integer的最大值则没有问题,若超过则必须用 (180 * 24 * 60 * 60 * 1000L) 这种加L的方式来。

当然为了避免出现此类问题,也可以采用最粗暴的方法,就是不管 表达式的计算结果是否超过了 Integer的最大值,都用 L来标识 是个 Long类型,这样绝对不会出错。若是一眼就能计算出来的

可以不用加L,比如:(8 * 24 * 32) 基本肯定不会超过 Integer的最大值不用加L也行,若是一眼计算不出来感觉很大的如:(180 * 24 * 500 * 24) 这种一眼计算不出来,且感觉会超过 Integer的最大值的

需要加L来标识 计算出来的结果是一个Long类型,以防止溢出Bug.

举例:

System.currentTimeMillis() + (24 * 60 * 60 * 1000) 这样是不会出错的,因为表达式的结果没有超过 Integer,long + integer 是没有问题的。
System.currentTimeMillis() + (180 * 24 * 60 * 60 * 1000); 这样就会出错,因为表达式的结果已经超过了 Integer,结果溢出了,表达式的计算结果变成了负数,导致 long - integer,最终导致计算出来的 数值 反而变小。

复制代码
public class TestMain3 {
    public static void main(String[] args) {

        Long now = System.currentTimeMillis();

        System.out.println("当前时间戳:" + now);

        //当表达式的计算结果,小于 Integer的最大值时,加L与不加L都没有问题,效果一样
        System.out.println("180 * 24 * 60 * 60: " + (180 * 24 * 60 * 60));
        System.out.println("180 * 24 * 60 * 60L: " + (180 * 24 * 60 * 60L));
        System.out.println(now + (180 * 24 * 60 * 60));
        System.out.println(now + (180 * 24 * 60 * 60L));

        //当表达式的计算结果,大于 Integer的最大值时,由于 溢出了会变成负数,所以最终的结果反而会变小
        System.out.println("180 * 24 * 60 * 60 * 1000: " + (180 * 24 * 60 * 60 * 1000));
        System.out.println("180 * 24 * 60 * 60 * 1000L: " + (180 * 24 * 60 * 60 * 1000L));
        System.out.println(now + (180 * 24 * 60 * 60 * 1000) + "(这里变小了,引起Bug)");
        System.out.println(now + (180 * 24 * 60 * 60 * 1000L));



    }
}
复制代码

 

 

==================================================================================================================================================

 

今天黄克说我生成的Token老是会过期,我郁闷,检查了一下代码 发现:

 

 

心想难道 (180 * 24 * 60 * 60 * 1000)这一串默认是 Integer类型,接下来开始测试:

 

 

 

 

 

 

 

 

 

 

posted on   del88  阅读(836)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2013-09-18 建立互斥程序代码 一般的程序用不到
点击右上角即可分享
微信分享提示