web-dev-qa-db-fra.com

Pourquoi ne puis-je pas avoir 'int' comme type de ArrayList?

Je veux déclarer une ArrayList de type int.

Pourquoi ce qui suit me donne une erreur:

ArrayList<int> list1 = new ArrayList<int>();

Mais les travaux suivants: 

ArrayList<Integer> list1 = new ArrayList<Integer>();

?

35
programmingIsFun

ArrayList ne peut référencer que des types, pas des primitives. Integer est une classe, pas une primitive. 

Lorsque vous déclarez ArrayList<Integer> list1 = new ArrayList<Integer>(), vous créez une ArrayList qui stockera le type Integer et non la primitive int.

Si vous souhaitez connaître la différence entre les types primitif et référence, consultez http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.html

37
Zach Latta

Parce que int est un type primitif . Seuls les types référence peuvent être utilisés comme paramètres génériques.

12
Oliver Charlesworth

La réponse courte est que les génériques (comme ArrayList<Integer>) n'acceptent pas les types primitifs (int), mais uniquement les objets (Integer).

En effet, les classes telles que ArrayList sont implémentées en utilisant des objets. Comme chaque classe hérite d'Object, le compilateur peut simplement connecter d'autres classes. Mais les types primitifs (comme int) n'héritent pas de Object, car ils ne sont pas des classes. Donc, Sun/Oracle a créé la classe Integer pour aider à cela.

Donc, en bref: int n'est pas un Object.

4
ameed

Toutes les réponses ci-dessus répondent pourquoi mais la racine de cette question est la boxe automatique et le déballage fréquents des types de données primitifs. Ce problème est déjà résolu par IntBuffer ou ChadBuffer ou vous nommez le type primitif déjà présent dans le dossier nio. Si vous voulez utiliser ArrayList primitif la prochaine fois, n'utilisez pas List, utilisez plutôt IntBuffer. 

0
Harish

int est un type de données primitif mais Integer est une classe, de sorte qu'un tableau arrayList ne peut prendre que des types de référence en tant que paramètre, pas de type primitif

0
Suprit Behera

int n'est pas un objet et donc si type de liste est int, les implémentations de la liste ne peuvent pas être effectuées.

0
Soutik Samanta

int est une primitive. Ce n'est pas une Object.

Reportez-vous à ce link pour plus de détails.

0
user929542