web-dev-qa-db-fra.com

Quelle est la différence entre Integer et int en Java?

Par exemple, pourquoi pouvez-vous faire:

int n = 9;

Mais non:

Integer n = 9;

Et vous pouvez faire:

Integer.parseInt("1");

Mais non:

int.parseInt("1");
217
mino

int est un type primitif. Les variables de type int stockent la valeur binaire réelle pour l'entier que vous voulez représenter. int.parseInt("1") n'a pas de sens car int est pas une classe et n'a donc aucune méthode.

Integer est une classe non différente des autres dans le langage Java. Variables de type Integer store références à Integer objets, comme avec tout autre type de référence (objet). Integer.parseInt("1") est un appel à la méthode statique parseInt de la classe Integer (notez que cette méthode renvoie en fait un int et non un Integer).

Pour être plus spécifique, Integer est une classe avec un seul champ de type int. Cette classe est utilisée lorsque vous avez besoin que int soit traité comme tout autre objet, tel que dans les types génériques ou dans des situations où vous avez besoin d'une nullabilité.

Notez que chaque type de primitive dans Java a un équivalent wrapper class:

  • byte a Byte
  • short a Short
  • int a Integer
  • long a Long
  • boolean a Boolean
  • char a Character
  • float a Float
  • double a Double

Les classes wrapper héritent de la classe Object et les primitives n'en possèdent pas. Donc, il peut être utilisé dans des collections avec référence d'objet ou avec des génériques.

Depuis Java 5, nous avons une liste de sélection automatique et la conversion entre la classe primitive et la classe wrapper est effectuée automatiquement. Attention cependant, cela peut introduire des bugs subtils et des problèmes de performances; être explicite sur les conversions ne fait jamais de mal.

296
Darkhogg

Integer est une classe et int est un type primitif.

Lisez sur ces liens:

31
Matjaz Muhic

Un entier est à peu près juste un wrapper pour le type primitif int. Il vous permet d’utiliser toutes les fonctions de la classe Integer pour vous rendre la vie un peu plus facile.

Si vous débutez dans Java, vous devriez apprendre à apprécier la documentation Java. Par exemple, tout ce que vous voulez savoir sur le Integer Class est documenté en détail.

C'est tout droit sorti de la documentation pour la classe Integer:

La classe Integer encapsule une valeur du type primitif int dans un objet. Un objet de type Integer contient un seul champ de type entier

7
Nadir Muzaffar

Une variable int contient une valeur entière signée sur 32 bits. Un entier (avec le capital I) contient une référence à un objet de type (classe) Integer, ou à null.

Java lance automatiquement entre les deux; de Integer à int lorsque l'objet Integer apparaît sous la forme d'un argument pour un opérateur int ou est affecté à une variable int ou qu'une valeur int est affectée à une variable Integer. Ce casting s'appelle boxing/unboxing.

Si une variable Integer référençant null est non emballée, explicitement ou implicitement, une exception NullPointerException est levée.

(Dans le texte ci-dessus, le terme "variable" signifie variable locale, champ ou paramètre)

6
user5585864

Integer fait référence au type de wrapper dans Java alors que int est un type primitif. Tout sauf les types de données primitifs dans Java est implémenté de la même manière que les objets qui impliquent que Java est un langage de programmation purement qualifié, orienté objet et hautement qualifié. Si vous avez besoin, tous les types de primitives sont également disponibles en tant que types de wrapper en Java. Les types primitifs peuvent présenter des avantages en termes de performances. Par conséquent, les types wrapper ne doivent être utilisés que lorsque cela est nécessaire.

Dans votre exemple ci-dessous.

Integer n = 9;

la constante 9 est en cours mise en boîte automatique (auto-boxing et unboxing apparaît automatiquement à partir de Java 5 et) à Integer et vous peut utiliser la déclaration comme ça et aussi Integer n = new Integer(9). Ceci est effectivement réalisé via la déclaration Integer.valueOf(9).intValue();

5
Lion

int est un type primitif et non un objet. Cela signifie qu’aucune méthode n’y est associée. Entier est un objet avec des méthodes (telles que parseInt).

Avec les nouveaux Java, il existe des fonctionnalités de boxing automatique (et de déballage). Cela signifie que le compilateur insérera Integer.valueOf (int) ou integer.intValue () si nécessaire. Cela signifie qu'il est effectivement possible d'écrire

Integer n = 9;

qui est interprété comme

Integer n = Integer.valueOf(9);
3
Roger Lindsjö

Integer est une classe/objet wrapper et int est un type primitif. Cette différence joue un rôle énorme lorsque vous souhaitez stocker des valeurs int dans une collection, car elles n'acceptent que les objets en tant que valeurs (jusqu'à jdk1.4). JDK5 et suite à cause de l'autoboxing c'est une toute autre histoire.

3
kosa

Dans Java, _int est un type de données primitif, tandis que Integer est une classe d'assistance, il est utilisé pour convertir un type de données en un autre.

Par exemple:

         double doubleValue = 156.5d;
         Double doubleObject  = new Double(doubleValue);
         Byte myByteValue = doubleObject.byteValue ();
         String myStringValue = doubleObject.toString();

Les types de données primitifs sont la mémoire disponible la plus rapide où la classe Helper est complexe et stockée dans la mémoire de tas.

référence de "David Gassner" Java Essential Training.

2
Aqeel Haider

Ceci est tiré de Java: La Référence Complète, Neuvième Edition

Java utilise des types primitifs (également appelés types simples), tels que int ​​ou double, pour contenir les types de données de base pris en charge par le langage. Les types primitifs, plutôt que des objets, sont utilisés pour ces quantités à des fins pour des raisons de performances. L'utilisation d'objets pour ces valeurs ajouterait un surcharge inacceptable au plus simple des calculs. Ainsi, les types primitifs ne font pas partie de la hiérarchie des objets, et ils n'héritent pas d'Object.

Malgré les avantages de performances offerts par les types primitifs, il est parfois nécessaire d'avoir une représentation d'objet. Par exemple, vous ne pouvez pas transmettre un type primitif par référence à une méthode. De plus, de nombreuses structures de données standard implémentées par Java opèrent sur des objets, ce qui signifie que vous ne pouvez pas utiliser ces structures de données (spécifiques à un objet) pour stocker des types primitifs. Pour gérer ces situations (et d'autres), Java fournit des wrappers de types, qui sont des classes qui encapsulent un type primitif dans un objet.

Les classes wrapper ont un rapport direct avec la fonctionnalité autoboxing de Java. Les types de caractères sont Double, Float, Long, Integer, Short, Byte, Character et Boolean. Ces classes offrent un large éventail de méthodes vous permettant d’intégrer pleinement les types primitifs dans la hiérarchie des objets de Java.

2
Teoman shipahi

int est un type primitif qui représente un entier. alors que Integer est un objet qui enveloppe int. L'objet Integer vous donne plus de fonctionnalités, telles que la conversion en hexadécimal, chaîne, etc.

Vous pouvez également utiliser les concepts OOP avec Integer. Par exemple, vous pouvez utiliser Integer pour les génériques (par exemple, Collection <Integer>).

2
M S

Pour optimiser l'exécution du code Java, inttype (s) primitif (s) a été ajouté, y compris float, bool etc. ainsi que là classes wrapper afin que, si nécessaire, vous puissiez les convertir et les utiliser comme objet Java standard, ainsi que de nombreux utilitaires fournis comme fonctions membres (tels que Integer.parseInt("1") ).

1
anand

int est un type de données primitif alors que Integer est un type Référence ou Wrapper (Class) en Java.

après Java 1.5 qui introduit le concept de sélection automatique et nboxing vous pouvez initialiser à la fois int ou Integer comme ceci.

int a= 9
Integer a = 9 // both valid After Java 1.5.

pourquoi Integer.parseInt("1"); mais pas int.parseInt("1"); ??

Integer est une classe définie dans la bibliothèque jdk et parseInt() est une méthode statique appartenant à la classe Integer.

Donc, Integer.parseInt("1"); est possible en Java. mais int est un type primitif (par exemple un mot clé) en Java. Donc, vous ne pouvez pas appeler parseInt() avec int.

1
Vikrant Kashyap