Безопасное приведение Long к Int в Java (обновлено для Java 8)
В Java приведение long к int потенциально может привести к в потере данных. Чтобы решить эту проблему, необходим безопасный и идиоматический подход.
Метод Math.toIntExact() в Java 8
До Java 8 рекомендуемый метод безопасного приведения long to int должен был проверить результат на предмет потенциальной потери информации. Это включало сравнение результата приведения с исходным длинным значением:
public static int safeLongToInt(long l) {
int i = (int) l;
if ((long) i != l) {
throw new IllegalArgumentException(l " cannot be cast to int without changing its value.");
}
return i;
}
Однако в Java 8 и более поздних версиях возникает ошибка Math.toIntExact(), которая может вызвать исключение ArithmeticException:
import static java.lang.Math.toIntExact;
long foo = 10L;
int bar = toIntExact(foo);
Дополнительные методы защиты от переполнения в Java 8
Помимо toIntExact(), в Java 8 появилось несколько других методов защиты от переполнения которые заканчиваются на «точный». Эти методы выполняют такие операции, как сложение, вычитание, отрицание и уменьшение, проверяя возможные переполнения:
С помощью Math.toIntExact () и этих дополнительных методов, безопасных для переполнения, вы можете безопасно приводить длинные значения к int и выполнять арифметические операции без риска потери информации.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3