web-dev-qa-db-fra.com

Convertir Long en Entier

Comment convertir une valeur Long en une valeur Integer en Java?

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

ou si vous n'avez pas à vous soucier de null:

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

Et dans les deux situations, vous pourriez rencontrer des débordements (car un long peut stocker une plage plus étendue qu'un entier).

427
Thilo

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 octet presque identique:

 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'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]
117
Sean Patrick Floyd
Integer intValue = myLong.intValue();
44
birdy

Si vous souhaitez vérifier les débordements et que vous avez Goyave pratique, il existe Ints.checkedCast() :

int theInt = Ints.checkedCast(theLong);

L'implémentation est extrêmement simple et jette IllegalArgumentException on overflow:

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

Vous devrez taper le lancer.

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

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 le documentation .

6
Jeff Foster

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

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

        }
}
6
Dushyant Sapra

Le meilleur moyen simple 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;
    }
4
Adi

En supposant que longVal n'est pas nul

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

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

3
Edwin Miguel

En Java 8, vous pouvez utiliser toIntExact . Si vous voulez gérer les valeurs null, utilisez:

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

La bonne chose à propos de cette méthode est qu’elle jette un ArithmeticException si l’argument (long) déborde de int.

1
Jasper de Vries

longs visiteurs = 1000;

int convVisitors = (int) visiteurs;

0
Bala

Utiliser toIntExact (valeur longue) renvoie la valeur de l'argument long, en lançant une exception si la valeur dépasse un entier cela fonctionnera uniquement avec les API de niveau 24 ou supérieur.

int id = Math.toIntExact(longId);
0
Anjal Saneen