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

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

要不然呢…… int 乘 int 当然会溢出了,就算最后存入 int64 变量也一样是溢出后的结果了。
Raymon111111
2019-08-26 11:14:57 +08:00
int 做乘法都要小心溢出的问题
ZiLong
2019-08-26 11:49:14 +08:00
数字默认是 int 型的,当运算的两个数据类型没有大小之分,就不会转型,所以 int 乘 int 就溢出了,跟 a/b 是不是 long 型没有关系,有建议,在使用 long 型的时候加个 1L*显式声明
champloo
2019-08-26 18:57:25 +08:00
@ZiLong @Raymon111111 @msg7086 蟹蟹回复,以后会记住这一点!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX