C'est la meilleure réponse car elle gère les valeurs NULL.
Viacheslav Dobromyslov
3
@ViacheslavDobromyslov, la question portait sur les valeurs longues, pas sur les valeurs nulles. Et personnellement, je crois en rejetant null à l'avance plutôt qu'en utilisant null in -> null out et en transportant ainsi null via mon application. On pourrait donc aussi affirmer que c'est la pire réponse :-)
Sean Patrick Floyd
1
Pourquoi voudriez-vous lancer deux fois quand vous pouvez simplement appeler à la intValueplace? De plus, il va déballer en long, cast en int et rebox en Integer, ce qui ne semble pas très utile. Je ne vois pas le point au-dessus de ma tête, avez-vous une bonne raison à cela?
Dici
J'obtiens l'erreur: impossible d'appeler intValue () sur le type primitif long
Anand
1
@Thilo oh, je comprends. Fondamentalement, vous vous convertissez Longen longpremier, puis enint
mrid
123
Voici trois façons de procéder:
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 octet presque identique:
Problème de style mineur: vous devriez probablement utiliser le suffixe majuscule 123Lpour plus de lisibilité.
Joey
Ou vous pouvez utiliser une bonne police ... et c'est reparti ...: D (juste j / k, je fais aussi ça)
davidcsb
@ViacheslavDobromyslov true. la question portait sur Long, not null
Sean Patrick Floyd
2
@SeanPatrickFloyd yep. N'oubliez pas que la valeur de la variable Long peut parfois être NULL.
Viacheslav Dobromyslov
2
@ user64141 La conversion de type en Java est un problème compliqué. Casting Objects est très bien, car vous ne changez rien, vous regardez simplement le même objet d'une manière différente. Mais dans ce cas, vous avez une chaîne de transtypages significatifs, de l'objet à la primitive, puis, à travers la folie de l'autoboxing, à objecter à nouveau, même si la syntaxe suggère qu'il s'agit d'une autre primitive. Pour moi, c'est une mauvaise utilisation de la boxe et de la conversion primitive. Tout ce qui peut être fait ne doit pas être fait.
publicstaticint safeLongToInt(long longNumber ){if( longNumber <Integer.MIN_VALUE || longNumber >Integer.MAX_VALUE ){thrownewIllegalArgumentException( longNumber +" cannot be cast to int without changing its value.");}return(int) longNumber;}
L'utilisation de toIntExact (valeur longue) renvoie la valeur de l'argument long, lançant une exception si la valeur déborde d'un int. cela ne fonctionnera que le niveau API 24 ou supérieur.
En java, 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);
Réponses:
ou si vous n'avez pas à vous soucier de null:
Et dans les deux situations, vous pourriez rencontrer des débordements (car un Long peut stocker une plage plus large qu'un Integer).
Java 8 a une méthode d'assistance qui vérifie les débordements (vous obtenez une exception dans ce cas):
la source
intValue
place? De plus, il va déballer en long, cast en int et rebox enInteger
, ce qui ne semble pas très utile. Je ne vois pas le point au-dessus de ma tête, avez-vous une bonne raison à cela?Long
enlong
premier, puis enint
Voici trois façons de procéder:
Les trois versions génèrent un code octet presque identique:
la source
123L
pour plus de lisibilité.Pour les valeurs non nulles:
la source
Si vous souhaitez vérifier les débordements et avoir de la goyave à portée de main, il y a
Ints.checkedCast()
:L'implémentation est simple et lève IllegalArgumentException en cas de débordement:
la source
Vous devrez taper cast it.
Gardez à l'esprit qu'un long a une plage plus grande qu'un int, vous risquez donc de perdre des données.
Si vous parlez des types encadrés, lisez la documentation .
la source
Si vous utilisez Java 8, procédez comme ci-dessous
la source
La meilleure façon simple de le faire est:
la source
Dans Java 8, vous pouvez utiliser
toIntExact
. Si vous souhaitez gérer desnull
valeurs, utilisez:Une bonne chose à propos de cette méthode est qu'elle lance un
ArithmeticException
si l'argument (long
) déborde d'unint
.la source
En supposant que nullVal longVal
Cela fonctionne par exemple y vous obtenez un objet qui peut être un entier ou un long. Je sais que c'est moche, mais ça arrive ...
la source
L'utilisation de toIntExact (valeur longue) renvoie la valeur de l'argument long, lançant une exception si la valeur déborde d'un int. cela ne fonctionnera que le niveau API 24 ou supérieur.
la source
visiteurs longs = 1000;
int convVisitors = (int) visiteurs;
la source
En java, 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.
la source