Quelle est la différence entre Integer et int en Java?
Par exemple pourquoi pouvez-vous faire:
int n = 9;
Mais pas:
Integer n = 9;
Et vous pouvez faire:
Integer.parseInt("1");
Mais pas:
int.parseInt("1");
12 answers
int
est un type primitif. Les variables de type int
stockent la valeur binaire réelle de l'entier que vous souhaitez 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, pas différente de toute autre dans le langage Java. Les variables de type Integer
stockentles références aux objets Integer
, comme pour 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 précis, Integer
est une classe avec un seul champ de type int
. Cette classe est utilisée lorsque vous avez besoin d'un int
pour être traité comme n'importe quel autre objet, comme dans les types génériques ou les situations où vous avez besoin de nullabilité.
Notez que chaque type primitif en Java a une classe équivalente wrapper :
-
byte
aByte
-
short
aShort
-
int
aInteger
-
long
aLong
-
boolean
aBoolean
-
char
aCharacter
-
float
aFloat
-
double
aDouble
Les classes Wrapper héritent de la classe Object, et les primitives ne le font pas. Il peut donc être utilisé dans des collections avec une référence d'objet ou avec des génériques.
Depuis java 5, nous avons autoboxing, et la conversion entre la classe primitive et wrapper se fait automatiquement. Méfiez-vous, cependant, car cela peut introduire des bugs subtils et les problèmes de performance; être explicite sur les conversions ne fait jamais de mal.
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 faciliter la vie.
Si vous êtes nouveau sur Java, quelque chose que vous devriez apprendre à apprécier est la documentation Java. Par exemple, tout ce que vous voulez savoir sur la classe entière est documenté en détail.
Ceci est tout droit sorti de la documentation pour la classe Integer:
La classe Integer encapsule une valeur de le type primitif int dans un objet. Un objet de type Integer contient un seul champ dont le type est int.
Integer
fait référence au type wrapper en Java alors que int
est un type primitif. Tout, sauf les types de données primitifs en Java, est implémenté comme des objets, ce qui implique que Java est un langage de programmation orienté objet pur hautement qualifié. Si vous en avez besoin, tous les types de primitives sont également disponibles en tant que types wrapper en Java. Vous pouvez avoir un avantage de performance avec les types primitifs, et donc les types wrapper ne doivent être utilisés que lorsque cela est nécessaire.
Dans votre exemple comme dessous.
Integer n = 9;
La constante 9
est mise en boîte automatique (auto-boxing
et unboxing
se produit automatiquement à partir de java 5
) à Integer
et donc vous pouvez utiliser l'instruction comme ça et aussi Integer n = new Integer(9)
. Ceci est effectivement réalisé grâce à la déclaration Integer.valueOf(9).intValue();
Une variable int contient une valeur entière signée de 32 bits. Un entier (avec majuscule I) contient une référence à un objet de type (classe) Integer, ou à null.
Java passe automatiquement entre les deux; de Integer à int chaque fois que l'objet Integer se produit en tant qu'argument d'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 entière référençant null est unboxed, explicitement ou implicitement, une NullPointerException est levée.
(Dans le texte ci-dessus, le terme "variable" signifie variable locale, champ ou paramètre)
Int est un type primitif et non un objet. Cela signifie qu'il n'existe pas de méthodes associées. Entier est un objet avec des méthodes (telles que parseInt).
Avec java plus récent, il existe des fonctionnalités pour la boxe automatique (et le déballage). Cela signifie que le compilateur insérera un entier.valueOf (int) ou entier.intValue () si nécessaire. Cela signifie qu'il est réellement possible d'écrire
Integer n = 9;
Qui est interprété comme
Integer n = Integer.valueOf(9);
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 des objets en tant que valeurs (jusqu'à jdk1.4). JDK5 en avant en raison de l'autoboxing, c'est une histoire complètement différente.
int
est un type primitif qui représente un entier. alors que Integer
est un Objet qui encapsule 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 de POO avec Integer
. Par exemple, vous pouvez utiliser Integer pour les génériques (c'est-à-dire Collection
).<Integer>
Pour optimiser le code Java runtime, int
type primitif(s) a été ajoutée, y compris float
, bool
etc. mais ils viennent avec làwrapper classes de sorte que si nécessaire, vous pouvez les convertir et les utiliser comme objet Java standard avec de nombreux utilitaires qui viennent comme leurs fonctions membres (telles que Integer.parseInt("1")
).
En Java, int est un type de données primitif tandis que Integer est une classe d'aide, 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 stockent la mémoire disponible la plus rapide où la classe d'assistance est complexe et stockent dans la mémoire de tas.
Référence de "David Gassner" Java Formation essentielle.
int
est un type de données primitif tandis que Integer
est un Type de référence ou d'enveloppe (Classe) en Java.
Après java 1.5
, qui introduisent le concept de l'autoboxing et unboxing, vous pouvez initialiser int
ou Integer
comme ceci.
int a= 9
Integer a = 9 // both valid After Java 1.5.
Pourquoi
Integer.parseInt("1");
, mais pasint.parseInt("1");
??
Integer
est une Classe définie dans jdk
bibliothèque et parseInt()
est une méthode statique appartient à Integer
Classe
Donc, Integer.parseInt("1");
est possible en java. mais int
est de type primitif (supposons comme un mot clé) en java. Donc, vous ne pouvez pas appeler parseInt()
avec int
.
Ceci est tiré de Java: La référence complète, Neuvième édition
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 langue. Les types primitifs, plutôt que les objets, sont utilisés pour ces quantités pour le pour des raisons de performance . Utilisation d'objets pour ces valeurs ajouterait un frais généraux inacceptables même au plus simple des calcul. Ainsi, les types primitifs ne font pas partie de l'objet hiérarchie, et ils n'héritent pas d'Objet.
Malgré la performance avantage offert par les types primitifs, il y a des moments où vous besoin d'une représentation d'objet. Par exemple, vous ne pouvez pas passer une primitive tapez par référence à une méthode . En outre, de nombreuses données standard les structures implémentées par Java fonctionnent sur des objets, ce qui signifie que vous ne pouvez pas utiliser ces données (spécifiques à un objet) structures pour stocker les types primitifs . De gérer ces situations (et d'autres), Java fournit des wrappers de type, qui sont des classes qui encapsulent un type primitif dans un objet.
Les classes Wrapper se rapportent directement aux autoboxing{[7 de Java]} caractéristique. Les wrappers de type sont Double, Float, Long, Integer, Short, Octet, Caractère et Booléen . Ces classes offrent un large éventail de les méthodes qui vous permettent d'intégrer pleinement les types primitifs dans Java est un objet hiérarchie.