Java long和int的坑

今天在计算两个时间月份间隔的时候遇到了以前没注意的一个坑,以前一直没留意long a = 100L和long a = 100的区别,今天遇到的这个坑让我弄明白了,也怪自己菜。

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new 
        SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = simpleDateFormat.parse("2021-01-20 00:00:00");
        long interval = new Date().getTime() - date.getTime();
        long unit = 1000*3600*24*30;
        double months = interval/unit;
        System.out.println(months);
    }

到了unit这一步,unit的值一直是个负数,网上找long的范围比1000*3600*24*30的范围大的多,照理说不会产生溢出。然后想到可不可能是int的范围。
网上搜了一下,不加L的默认是int,占4个字节;加L是long类型,8个字节。
long unit = 1000*3600*24*30;
改成long unit = 1000*3600*24*30L;就一切正常了,

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容