Сегодня я нашел одну из моих программ ошибкой, потому что неявный бросок не работал, лучше говоря, что он не работает, как я ожидаю.
У меня было что-то вроде этого
long normal = 1000*24*3600*1000;
System.out.println("normal :"+normal);
нормальный: 500.654.080
запрос excel, правильный результат вычисления должен быть 86.400.000.000;
Я пошел в руководство java, а максимальное значение для длинного типа данных должно быть 2 ^ 63-1, то есть: 9.223.372.036.854.780.000
то я попытался заставить заклинание длиться, и, похоже, он работает:
long normal = 1000*24*3600*1000;
long explicit = 1000*24*3600*1000l; // 1000l <- letter L used at the end for long
long cast = 1000*(long)(24*3600*1000);
System.out.println("normal :"+normal);
System.out.println("explicit :"+explicit );
System.out.println("cast :"+cast);
нормальный: 500.654.080
Явный: 86.400.000.000
cast: 86.400.000.000
Что я думаю, происходит, так это то, что java вычисляет как целое число a в точке, где происходит целочисленное переполнение.
Должен ли Java неявно отбрасывать эти целые числа?