首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

Java int 和 long 进行运算时,发生的奇怪事情(我重新排版了,第二次发帖不懂格式)

  •  
  •   champloo · 26 天前 · 1710 次点击
    自己写了一个 app,在造数据进行测试时,发生了一件升起的事情
    如下图:
    b 是由 a-i*86399999 得到,二者均为 long 类型
    但发现在 86399999 这个数字后如果不加 l,会发生以下事件
    b 居然比 a 大!
    我是这样发现的:一开始我并没有加 L,后面猜测会不会是 long 和 int 加减的问题,遂在 86399999 后加了这个 L
    注释一下:86399999 是一天 24 小时总共的时间戳,我为了生成每天的数据弄的这个值
    7 回复  |  直到 2019-08-26 18:57:25 +08:00
        1
    champloo   26 天前
        2
    champloo   26 天前
        3
    champloo   26 天前
    解决了!是 int 精度溢出的问题,因为会先进行乘法运算!
        4
    msg7086   26 天前
    「因为会先进行乘法运算!」

    要不然呢…… int 乘 int 当然会溢出了,就算最后存入 int64 变量也一样是溢出后的结果了。
        5
    Raymon111111   25 天前
    int 做乘法都要小心溢出的问题
        6
    ZiLong   25 天前
    数字默认是 int 型的,当运算的两个数据类型没有大小之分,就不会转型,所以 int 乘 int 就溢出了,跟 a/b 是不是 long 型没有关系,有建议,在使用 long 型的时候加个 1L*显式声明
        7
    champloo   25 天前
    @ZiLong @Raymon111111 @msg7086 蟹蟹回复,以后会记住这一点!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2401 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 02:56 · PVG 10:56 · LAX 19:56 · JFK 22:56
    ♥ Do have faith in what you're doing.