Como converter Long para Int em Java

Hassan Saeed 12 outubro 2023
  1. Utilize o tipo de fundição para converter um long para um int em Java
  2. Utilize Math.toIntExac() para converter um long para um int em Java
Como converter Long para Int em Java

Este tutorial discute métodos para converter um long para um int em Java.

Utilize o tipo de fundição para converter um long para um int em Java

A maneira mais simples de converter um long para um int em Java é digitar o long para o int utilizando (int) longVar. O exemplo abaixo ilustra isso:

public class MyClass {
  public static void main(String args[]) {
    long myLong = 10000l;
    int myInt = (int) myLong;
    System.out.println("Value of long: " + myLong);
    System.out.println("Value after conversion to int: " + myInt);
  }
}

Resultado:

Value of long: 10000
Value after conversion to int: 10000

Utilize Math.toIntExac() para converter um long para um int em Java

No Java 8 e acima, podemos utilizar o método da classe Math incorporado - Math.toIntExac() para converter um long para um int em Java. O exemplo abaixo ilustra isso:

public class MyClass {
  public static void main(String args[]) {
    long myLong = 10000l;
    int myInt = Math.toIntExact(myLong);
    System.out.println("Value of long: " + myLong);
    System.out.println("Value after conversion to int: " + myInt);
  }
}

Resultado:

Value of long: 10000
Value after conversion to int: 10000

Estes são os dois métodos comumente utilizados para converter um long para um int em Java. Entretanto, precisamos garantir que o valor long que temos possa ser armazenado inteiramente no int, já que ambos têm limites de memória diferentes, 32 bits contra 64 bits.

Ambos os métodos se comportam de forma diferente quando tentamos converter um valor long que é maior que 32 bits para um int.

O exemplo abaixo ilustra como a digitação se comporta neste caso.

public class MyClass {
  public static void main(String args[]) {
    long myLong = 10000000000l;
    int myInt = (int) myLong;
    System.out.println("Value of long: " + myLong);
    System.out.println("Value after conversion to int: " + myInt);
  }
}

Resultado:

Value of long: 10000000000
Value after conversion to int: 1410065408

Observe que o valor convertido resultante está errado, pois não podemos encaixar este valor long em uma variável int.

O exemplo abaixo ilustra como o Math.toIntExac() se comporta neste caso.

public class MyClass {
  public static void main(String args[]) {
    long myLong = 10000000000l;
    int myInt = Math.toIntExact(myLong);
    System.out.println("Value of long: " + myLong);
    System.out.println("Value after conversion to int: " + myInt);
  }
}

Resultado:

> Exception in thread "main" java.lang.ArithmeticException: integer overflow
	at java.base/java.lang.Math.toIntExact(Math.java:1071)
	at MyClass.main(MyClass.java:4)

Note que este método dá um erro de integer overflow em vez de tentar encaixar erroneamente o valor long em um int.

Artigo relacionado - Java Int