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 dois-je choisir quoi?
Long
est la Object
forme long
et Integer
est la forme objet de int
.
Le long
utilise 64 bits . Le int
utilise 32 bits et ne peut donc contenir que des nombres jusqu'à ± 2 milliards (-2 31 à +2 31 -1).
Vous devez utiliser long
et int
, sauf lorsque vous devez utiliser des méthodes héritées de Object
, telles que hashcode
. Java.util.collections
Les méthodes utilisent généralement les Object
versions encadrées ( enveloppées), car elles doivent fonctionner pour tout Object
, et un type primitif, comme int
ou long
, n'est pas un Object
.
Une autre différence est que long
et int
sont des valeurs pass-by-value , alors que Long
et Integer
sont des valeurs pass-by-reference , comme tous les types Java non primitifs. Donc, s'il était possible de modifier un Long
ou Integer
(ce n'est pas le cas, ils sont immuables sans utiliser de code JNI), il y aurait une autre raison d'utiliser l'un par rapport à l'autre.
Une dernière différence est que un Long
ou Integer
pourrait être null
.
Il y a quelques choses que vous ne pouvez pas faire avec un type primitif:
null
valeurObject
sSauf si vous en avez besoin, vous devriez préférer les types primitifs, car ils nécessitent moins de mémoire.
la source
int
, lorsque vous détenez des nombres.int
est trop petite, utilisez unlong
long
est trop petite, utilisezBigInteger
Collection
, manipulationnull
, ...), utilisezInteger
/ à laLong
placela source
An
int
est un entier de 32 bits; along
est un entier de 64 bits. Lequel utiliser dépend de la taille des nombres avec lesquels vous prévoyez de travailler.int
etlong
sont des types primitifs, tandis queInteger
etLong
sont des objets. Les types primitifs sont plus efficaces, mais vous devez parfois utiliser des objets; par exemple, les classes de collection de Java ne peut de travailler sur des objets, donc si vous avez besoin d' une liste d'entiers vous devez en faire unList<Integer>
, par exemple (vous ne pouvez pas utiliserint
dans unList
directement).la source
Integer est un type entier 32 bits signé
Int
32 bits (4byte)
-2,147,483,648 to 2,147,483,647
Long est un type entier 64 bits signé
Long
64 bits (8byte)
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Si votre utilisation d'une variable se situe dans la plage de 32 bits, utilisez
Int
, sinon utilisezlong
. Habituellement, long est utilisé pour les calculs scientifiques et des trucs comme ça nécessitent beaucoup de précision. (par exemple, valeur de pi).la source
Quand il s'agit d'utiliser un nombre très long qui peut dépasser 32 bits à représenter, 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 in-boxing et out-boxing pour rendre l'utilisation de int et Integer complètement identique. Cela signifie que vous pouvez faire:
La boxe dans et hors vous permettent de basculer entre int et entier sans conversion supplémentaire (idem pour
Long
,Double
,Short
aussi)Vous pouvez utiliser
int
tout le temps, maisInteger
contient des méthodes d'assistance qui peuvent vous aider à effectuer des opérations complexes avec des entiers (tels queInteger.parseInt(String)
)la source
a) Classe d'objet "Long" versus type primitif "long". (Au moins en Java)
b) Il existe différentes tailles de mémoire (même peu claires) des types primitifs:
Java - tout est clair: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
C .. juste désordre: https://en.wikipedia.org/wiki/C_data_types
la source