在调试我的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对象?