Преобразование длинного в целое

Как преобразовать значение Long в Integer в Java?

Ответ 1

Integer i = theLong != null ? theLong.intValue() : null;

или если вам не нужно беспокоиться о нуле:

// auto-unboxing does not go from Long to int directly, so
Integer i = (int) (long) theLong;

И в обеих ситуациях вы можете столкнуться с переполнением (потому что Long может хранить более широкий диапазон, чем Integer).

В Java 8 есть вспомогательный метод, который проверяет переполнение (в этом случае вы получаете исключение):

Integer i = theLong == null ? null : Math.toIntExact(theLong);

Ответ 2

Вот три способа сделать это:

Long l = 123L;
Integer correctButComplicated = Integer.valueOf(l.intValue());
Integer withBoxing = l.intValue();
Integer terrible = (int) (long) l;

Все три версии генерируют почти идентичный байтовый код:

 0  ldc2_w <Long 123> [17]
 3  invokestatic java.lang.Long.valueOf(long) : java.lang.Long [19]
 6  astore_1 [l]
 // first
 7  aload_1 [l]
 8  invokevirtual java.lang.Long.intValue() : int [25]
11  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
14  astore_2 [correctButComplicated]
// second
15  aload_1 [l]
16  invokevirtual java.lang.Long.intValue() : int [25]
19  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
22  astore_3 [withBoxing]
// third
23  aload_1 [l]
// here the difference:
24  invokevirtual java.lang.Long.longValue() : long [34]
27  l2i
28  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29]
31  astore 4 [terrible]

Ответ 3

Для ненулевых значений:

Integer intValue = myLong.intValue();

Ответ 4

Если вы хотите проверить наличие переполнений и использовать Guava, есть Ints.checkedCast():

int theInt = Ints.checkedCast(theLong);

Реализация очень проста и вызывает переполнение IllegalArgumentException:

public static int checkedCast(long value) {
  int result = (int) value;
  checkArgument(result == value, "Out of range: %s", value);
  return result;
}

Ответ 5

Вам нужно будет ввести его.

long i = 100L;
int k = (int) i;

Помните, что длинный имеет больший диапазон, чем int, поэтому вы можете потерять данные.

Если вы говорите о типах в штучной упаковке, прочитайте документацию.

Ответ 6

Если вы используете Java 8 Сделайте это как ниже

    import static java.lang.Math.toIntExact;

    public class DateFormatSampleCode {
        public static void main(String[] args) {
            long longValue = 1223321L;
            int longTointValue = toIntExact(longValue);
            System.out.println(longTointValue);

        }
}

Ответ 7

Самый простой способ сделать это:

public static int safeLongToInt( long longNumber ) 
    {
        if ( longNumber < Integer.MIN_VALUE || longNumber > Integer.MAX_VALUE ) 
        {
            throw new IllegalArgumentException( longNumber + " cannot be cast to int without changing its value." );
        }
        return (int) longNumber;
    }

Ответ 8

Предполагая, что null nullVal

Integer intVal = ((Number)longVal).intValue();

Он работает, например, y вы получаете объект, который может быть целым или длинным. Я знаю, что это уродливо, но бывает...

Ответ 9

В Java 8 вы можете использовать toIntExact. Если вы хотите обработать null значения, используйте:

Integer intVal = longVal == null ? null : Math.toIntExact(longVal);

Хорошая вещь об этом методе - то, что он вызывает ArithmeticException если аргумент (long) переполняет int.

Ответ 10

Использование toIntExact (long value) возвращает значение длинного аргумента, вызывая исключение, если значение переполняет int. это будет работать только API уровня 24 или выше.

int id = Math.toIntExact(longId);

Ответ 11

Длинные посетители = 1000;

int convVisitors = (int) посетителей;

Ответ 12

В java существует строгий способ преобразования long в int

не только lnog может преобразовывать в int, любой тип класса extends Number может преобразовывать в другой тип Number вообще, здесь я покажу вам, как преобразовать long в int, другой тип наоборот.

Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);