web-dev-qa-db-fra.com

Utiliser int vs Integer

Je suis tombé sur une classe qui utilisait des variables Integer pour capturer la taille à utiliser dans une boucle for. Est-ce une bonne pratique ou devrions-nous utiliser le type de données primitive int?

Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j) 
50
developer

la classe Integer est fournie de sorte que les valeurs puissent être encadrées/non emballées d'une manière pure OO. utilisez int, le cas échéant, sauf si vous avez spécifiquement besoin de l'utiliser de manière OO; auquel cas Integer est approprié.

Java Int vs Integer

Cependant, des choses très différentes se passent sous les couvertures ici. Un int est un nombre; un> entier est un pointeur qui peut référencer un objet contenant un nombre.

...

Un int n'est pas un objet et ne peut être transmis à aucune méthode nécessitant objets. Un cas courant consiste à utiliser les classes de collection fournies ( List, Map, Set) - bien qu'il soit possible d'écrire des versions de celles-ci classes qui offrent des capacités similaires aux versions d'objet. Le les classes wrapper (Integer, Double, etc.) sont fréquemment nécessaires chaque fois que l'introspection est utilisée (comme dans l'API de réflexion).

Une meilleure description du moment d'utiliser l'un par rapport à l'autre:

Choisir entre int et Integer

Je commencerai par comment ces types devraient être utilisés avant d'entrer dans détail sur pourquoi.

  • Préférer int pour des raisons de performances 
  • Méthodes qui prennent des objets (y compris des types génériques tels que List<T>) impliquera implicitement l’utilisation de Integer 
  • L'utilisation de Integer est relativement peu coûteuse pour les valeurs faibles (-128 à 127) en raison de l'internalisation - utilisez Integer.valueOf(int) et non nouvelle Entier (int) 
  • Ne pas utiliser == ou != avec les types Integer 
  • Pensez à utiliser Integer lorsque vous devez représenter le absence de valeur (null)
  • Méfiez-vous des valeurs entiers unboxing à int avec des valeurs null
77
Mike McMahon

Si vous pouvez utiliser int, faites-le. Si la valeur peut être null ou est utilisé en tant qu'objet, par exemple. Génériques, utilisez Integer

Habituellement, le type que vous utilisez n'a pas d'importance, mais souvent int est légèrement supérieur.

34
Peter Lawrey

Cette approche n’est pas bonne dans la pratique, utilisez int chaque fois que cela est possible. L'utilisation de Integer indique que cette variable particulière peut être null (ou qu'elle faisait partie d'une collection, de fous génériques ...) - ce qui n'est pas le cas.

Utiliser également Integer introduit une surcharge supplémentaire de boxe et de déballage.

14

C'est un désastre potentiel qui n'attend que de grands projets. Le codeur ici a oublié que chaque entier est en réalité un nouvel objet et que, pour l'utiliser en tant qu'int, il doit y avoir de la boxe et de la déballage en permanence. Non seulement il est inefficace, mais il ne fonctionnera pas comme prévu. Il est conseillé de toujours utiliser int lorsque cela est possible, et d'utiliser uniquement Integer pour placer ces valeurs dans des listes, des conteneurs ou pour le stockage de bases de données. Rappelez-vous, comparer des objets avec>, <et == signifie autre chose que lorsque vous utilisez les mêmes opérateurs pour comparer des primitives.

3
Ewald

Ne l'utilisez que pour faire une boucle. Utilisez le type primitif int (meilleures performances), qui n'est pas identique à la classe Integer.

La classe Integer encapsule une valeur du type primitif int dans un fichier objet. Un objet de type Integer contient un seul champ dont le type est int.

De plus, cette classe fournit plusieurs méthodes pour convertir un int à une chaîne et une chaîne à un int, ainsi que d'autres constantes et méthodes utiles lorsqu'il s'agit d'un int.

Donc, utilisez Integer si vous devez appeler les fonctions Integer ou si vous devez lui affecter une valeur null.

Vous devrez également utiliser Integer au lieu de int pour des génériques comme List

1

Lorsqu'il est nécessaire d'utiliser des objets, vous devez utiliser les classes Wrapper, comme Integer, Double, Float, etc ...

par exemple:

 int n = Integer.parseInt("10");

Ici, nous convertissons la chaîne en un entier (type primitif), Mais la méthode parseInt (String str) fonctionne uniquement avec les classes Wrapper (c.-à-d. Object), de celui-ci en Java.

1

Les performances de boxing et de déballage peuvent être pénalisées, car la conversion entre une primitive et un type de référence entraîne un surcoût.

Cependant, la classe Integer ajoute des méthodes supplémentaires qui peuvent être très utiles.

1
dckrooney

Promouvoir les types primitifs toujours là où c'est possible. 

les types primitifs ne peuvent pas être utilisés en tant que GenericArgument ou null. 

J'utilise normalement Integer à cause de purement OO. Les performances de int sont nettement meilleures que celles des objets, mais elles ne se remarquent que lorsque vous passez en boucle des millions de fois.

IMHO, Si les performances sont d'une importance primordiale dans votre application et que vous souhaitez utiliser même une seule seconde, puis utilisez int sans aucun cerveau. Mais si OO et que la lisibilité est la principale préoccupation, utilisez Integer. 

0
Rakesh Chauhan