警惕JAVA中的int越界问题

问题

在工作中碰到一件奇怪的事,下面的代码计算有问题,计算时间老是少一大截。

代码如下:

解决

代码看起来没问题,但是 System.currentTimeMillis()+(refreshTokenExpiresIn)*1000 在 refreshTokenExpiresIn太大的时候会造成int 越界,又被转成了long 从而导致计算有问题。

这种问题编译器不会提示的,所以我们在写代码的时候,必须警惕该类问题,尤其涉及 int*int 转成long类型的时候。

单独的int*int java在运行时会报错的,但是在涉及int*int 再转成long 的计算表达式中,java会自动截断,不会提示任何错误.

正确的写法

 


发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据