Réponses:
Mise à jour, en Java 8:
Math.toIntExact(value);
Réponse originale:
Le casting de type simple devrait le faire:
long l = 100000;
int i = (int) l;
Notez, cependant, qu'un grand nombre (généralement plus grand que 2147483647
et plus petit que -2147483648
) perdra certains des bits et serait représenté de manière incorrecte.
Par exemple, 2147483648
serait représenté comme -2147483648
.
Long x = 100L;
int y = x.intValue();
intValue()
est ici en arrière-plan, c'est de donner de la valeur.
long
ici. C'est le type de référence Long
qui ne peut pas directement être converti en primitive int
. int y = (int)x;
lance une exception mais int y = (int)(long)x
fonctionne. (La raison est la boxe automatique)
Pour les petites valeurs, le casting suffit:
long l = 42;
int i = (int) l;
Cependant, un long
peut contenir plus d'informations qu'un int
, il n'est donc pas possible de convertir parfaitement de long
à int
, dans le cas général. Si le long
nombre contient un nombre inférieur ou égal à Integer.MAX_VALUE
vous pouvez le convertir en lançant sans perdre aucune information.
Par exemple, l'exemple de code suivant:
System.out.println( "largest long is " + Long.MAX_VALUE );
System.out.println( "largest int is " + Integer.MAX_VALUE );
long x = (long)Integer.MAX_VALUE;
x++;
System.out.println("long x=" + x);
int y = (int) x;
System.out.println("int y=" + y);
produit la sortie suivante sur ma machine:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
Remarquez le signe négatif y
. Parce que x
détenait une valeur supérieure à Integer.MAX_VALUE, int y
n'a pas pu la conserver. Dans ce cas, il s'est enroulé autour des nombres négatifs.
Si vous vouliez gérer ce cas vous-même, vous pourriez faire quelque chose comme:
if ( x > (long)Integer.MAX_VALUE ) {
// x is too big to convert, throw an exception or something useful
}
else {
y = (int)x;
}
Tout cela suppose des chiffres positifs. Pour les nombres négatifs, utilisez MIN_VALUE
au lieu de «MAX_VALUE»
Depuis Java 8, vous pouvez utiliser: Math.toIntExact (valeur longue)
Renvoie la valeur de l'argument long; lever une exception si la valeur déborde d'un int.
Code source de Math.toIntExact
JDK 8:
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
Si vous utilisez la bibliothèque Guava , il existe des méthodes Ints.checkedCast(long)
et Ints.saturatedCast(long)
pour convertir long
en int
.
long x = 3;
int y = (int) x;
mais cela suppose que le long
peut être représenté comme un int
, vous connaissez la différence entre les deux?
Vous pouvez utiliser le Long
wrapper au lieu de la long
primitive et appeler
Long.intValue()
Il arrondit / tronque la long
valeur en conséquence pour tenir dans un int
.
Si la diffusion directe montre une erreur, vous pouvez le faire comme ceci:
Long id = 100;
int int_id = (int) (id % 100000);
En Java, un long est un nombre signé de 64 bits, ce qui signifie que vous pouvez stocker des nombres compris entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807 (inclus).
Un int, d'autre part, est un nombre signé de 32 bits, ce qui signifie que vous pouvez stocker un nombre compris entre -2 147 483 648 et 2 147 483 647 (inclus).
Donc, si votre long est en dehors des valeurs autorisées pour un int, vous n'obtiendrez pas une conversion valable.
Détails sur les tailles des types Java primitifs ici:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
En Java 8, je fais de la manière suivante
long l = 100L;
int i = Math.toIntExact(l);
Cette méthode lance ArithmaticException
si la long
valeur dépasse la plage de int
. Ainsi je suis à l'abri de la perte de données.
Si vous souhaitez effectuer une conversion sûre et profiter de l'utilisation de Java8 avec l'expression Lambda, vous pouvez l'utiliser comme:
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
Function<Long,Integer> function =
?
long x = 3120L; // prend n'importe quelle valeur longue int z = x.intValue (); // vous pouvez également convertir double en int de la même manière
si vous avez besoin de cacher directement alors
longvalue.intvalue ();
Long l = 100;
int i = Math.round(l);
Au printemps, il existe un moyen rigoureux de convertir un long en int
non seulement lnog peut se convertir en int, tout type de classe étend Number peut être converti en un autre type Number en général, ici je vais vous montrer comment convertir un long en int, un autre type vice versa.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);