Java - 奇怪的行为转换为int

时间:2017-05-19 22:10:05

标签: java casting

在调试我的Android应用程序时,我发现了将long转换为int时的意外行为。对于甚至非常低的长值(即两位数),将其转换为int导致负数。下面是我的Log.d&#39的代码和输出。我传入一个表示日期的长整数,以毫秒为单位。

private int calcNumDaysFrom(long previousDay) {
        long today = new Date().getTime();
        Log.d(TAG, "Today: " + today + " lastDay: " + previousDay + " difference: " + (today - previousDay));
        Log.d(TAG, "Not casted: " + (today - previousDay) / (1000 * 60 * 60 * 24));
        Log.d(TAG, "Casted: " + (int) (today - previousDay) / (1000 * 60 * 60 * 24));
        Long result = (today - previousDay) / (1000 * 60 * 60 * 24);
        return result.intValue();
    }
  

LandingPageFragment:今日:1495231339845 lastDay:1492488000000差异:2743339845

     

LandingPageFragment:未投放:31

     

LandingPageFragment:Casted:-17

你可以看到我"修复"我的问题是使用Long对象和成员方法.intValue(),但我真的想知道断开连接的位置。这是一个2赞美问题吗?有没有办法可以预测何时会发生这种事情,所以我知道是否必须使用Long对象?

0 个答案:

没有答案
相关问题