web-dev-qa-db-fra.com

Long vs Integer, long vs int, que faut-il utiliser et quand?

Parfois, je vois des API utiliser long ou Long ou int ou Integer, et je ne peux pas comprendre comment la décision est prise pour cela? 

Quand devrais-je choisir quoi?

Long est la forme Object de long et Integer est la forme objet de int.

La long utilise 64 bits . La int utilise 32 bits et ne peut donc contenir que des nombres allant jusqu'à ± 2 milliards (-231 à +231-1).

Vous devez utiliser long et int, sauf lorsque vous devez utiliser des méthodes héritées de Object, telles que hashcode. Les méthodes Java.util.collections utilisent généralement les versions encadrées (Object- wrapped), car elles doivent fonctionner pour toute variable Object, et un type primitif tel que int ou long n'est pas une Object.

Une autre différence est que long et int sont pass-by-value, alors que Long et Integer sont pass-by-reference value, comme tous les types Java non primitifs. Donc, s'il était possible de modifier une variable Long ou Integer (ce n'est pas le cas, elles sont immuables sans utiliser le code JNI), il y aurait une autre raison d'utiliser l'une sur l'autre.

Une dernière différence est qu'une Long ou Integer pourrait être null.

165
Borealid

Il y a plusieurs choses que vous ne pouvez pas faire avec un type primitif:

  • Avoir une valeur null
  • synchroniser sur eux
  • Utilisez-les comme paramètre de type pour une classe générique et en relation avec celui-ci:
  • Transmettez-les à une API qui fonctionne avec Objects

Sauf si vous en avez besoin, préférez les types primitifs, car ils nécessitent moins de mémoire.

24
  • Par défaut, utilisez une int lorsque vous détenez des nombres.
  • Si la plage de int est trop petite, utilisez un long
  • Si la plage de long est trop petite, utilisez BigInteger
  • Si vous devez gérer vos nombres en tant qu'objet (par exemple, lorsque vous les mettez dans une variable Collection, manipulant null, ...), utilisez plutôt Integer/Long.
17
Joachim Sauer

int est un entier de 32 bits; long est un entier de 64 bits. Lequel utiliser dépend de la taille des nombres avec lesquels vous comptez travailler.

int et long sont des types primitifs, alors que Integer et Long sont des objets. Les types primitifs sont plus efficaces, mais vous devez parfois utiliser des objets. Par exemple, les classes de collection Java ne peuvent fonctionner qu'avec des objets. Par conséquent, si vous avez besoin d'une liste d'entiers, vous devez en faire un List<Integer>, par exemple (vous ne pouvez pas utiliser int dans une List directement).

12
Jesper

Java - tout est clair: https://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes.html

  • octet, caractère .. 1B .. 8b
  • court int .. 2B .. 16b
  • int .. .. .. .. 4B .. 32b
  • long int .. 8B .. 64b

C .. juste désordre: https://en.wikipedia.org/wiki/C_data_types

  • court .. .. 16b
  • int .. .. .. 16b ... wtf?!?!
  • long .. .. 32b
  • long long .. 64b .. désordre! : - /
1
Franta

Lorsqu'il s'agit d'utiliser un nombre très long pouvant représenter plus de 32 bits, vous pouvez utiliser long pour vous assurer que vous n'aurez pas de comportement étrange. 

À partir de Java 5, vous pouvez utiliser les fonctionnalités de boxe et de boxe pour rendre l'utilisation de int et Integer complètement identique. Cela signifie que vous pouvez faire: 

int myInt = new Integer(11);
Integer myInt2 = myInt;

Les box in et out vous permettent de basculer entre int et Integer sans conversion supplémentaire (idem pour Long, Double, Short également)

Vous pouvez utiliser int tout le temps, mais Integer contient des méthodes d'assistance qui peuvent vous aider à effectuer des opérations complexes avec des entiers (tels que Integer.parseInt(String)).

1

Entier est un type 32 bits signé

  • NotéInt
  • Taille =32 bits (4byte)
  • Peut contenir des entiers de plage-2,147,483,648 to 2,147,483,647
  • la valeur par défaut est 0


Long est un type entier signé de 64 bits

  • NotéLong
  • Taille =32 bits (8byte)
  • Peut contenir des entiers de plage-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  • la valeur par défaut est 0L


Si votre utilisation d'une variable se situe dans la plage 32 bits, utilisez Int, sinon utilisez long. Habituellement long est utilisé pour les calculs scientifiques et des choses comme celle-là ont besoin de beaucoup de précision. (ex. valeur de pi).

Le cas de YouTube est un exemple de choix entre l'un et l'autre. Ils ont d'abord défini le compteur de vues vidéo comme une variable int qui était débordée lorsque plus de 2 147 483 647 vues ont été reçues sous forme de vidéo populaire. Etant donné qu'un compteur Int ne peut stocker aucune valeur supérieure à sa plage, YouTube l'a remplacé par une variable 64 bits et peut désormais compter jusqu'à 9 223 372 036 854 775 807 vues. Comprenez vos données et choisissez le type qui convient en tant que La variable 64 bits occupera le double de la mémoire d’une variable 32 bits.

0
All Іѕ Vаиітy