«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу безопасно преобразовать Long в Int в Java 8 и более поздних версиях?

Как я могу безопасно преобразовать Long в Int в Java 8 и более поздних версиях?

Опубликовано 15 ноября 2024 г.
Просматривать:734

How Can I Safely Cast a Long to an Int in Java 8 and Beyond?

Безопасное приведение 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.incrementExact(long)
  • Math.subtractExact(long, long)
  • Math.decrementExact(long)
  • Math.negateExact(long)
  • Math.subtractExact(int, int)

С помощью Math.toIntExact () и этих дополнительных методов, безопасных для переполнения, вы можете безопасно приводить длинные значения к int и выполнять арифметические операции без риска потери информации.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3