Convertir Long en Entier

Comment convertir une valeur Long valeur Integer en Java?

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

ou si vous n’avez pas besoin de vous soucier de null:

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

Et dans les deux cas, vous risquez de rencontrer des débordements (car un long peut stocker une plage plus large qu’un entier).

Voici trois façons de le faire:

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

Les trois versions génèrent un code d’octet presque identique:

  0 ldc2_w  [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's 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] 
 Integer intValue = myLong.intValue(); 

Si vous voulez vérifier les débordements et avoir Guava à scope de main, il y a Ints.checkedCast() :

 int theInt = Ints.checkedCast(theLong); 

L’implémentation est simple et lance une exception IllegalArgumentException en cas de débordement:

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

Vous devrez taper cast

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

Gardez à l’esprit qu’un long a une scope plus grande qu’un int, donc vous risquez de perdre des données.

Si vous parlez des types encadrés, lisez la documentation .

Si vous utilisez Java 8 Faites-le comme ci-dessous

  import static java.lang.Math.toIntExact; public class DateFormatSampleCode { public static void main(Ssortingng[] args) { long longValue = 1223321L; int longTointValue = toIntExact(longValue); System.out.println(longTointValue); } } 

La meilleure façon de le faire est:

 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; } 

En supposant que non null longVal

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

Cela fonctionne par exemple si vous obtenez un object qui peut être un entier ou un long. Je sais que c’est moche, mais ça arrive …

visiteurs longs = 1000;

int convVisitors = (int) visiteurs;

Dans Java 8, vous pouvez utiliser toIntExact . Si vous souhaitez gérer null valeurs null , utilisez:

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

Ce qui est bien avec cette méthode, c’est qu’elle lance une ArithmeticException si l’argument ( long ) déborde d’un int .

L’utilisation de toIntExact (valeur longue) renvoie la valeur de l’argument long, en générant une exception si la valeur déborde d’un int. il ne fonctionnera que le niveau 24 ou supérieur de l’API.

 int id = Math.toIntExact(longId); 

En java, il existe un moyen rigoureux de convertir un long en int

non seulement lnog peut convertir en int, n’importe quel type de classe extend mais nombre peut convertir en un autre type de nombre en général, ici je vais vous montrer comment convertir un long en int, autre type vice versa.

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