Question

Quelqu'un peut-il me expliquer l'utilisation de Integer, Boolean etc en place de leurs types primitifs en Java?

Je ne peux pas sembler saisir les avantages de leur fournissent. Ils semblent créer des problèmes inutiles de la gestion des valeurs nulles.

Merci!

Était-ce utile?

La solution

Boolean, Integer, Long, ... sont des objets. Vous pouvez les utiliser dans des endroits où vous ne pouvez pas utiliser des types primitifs, par exemple

  • les stocker dans une collection comme un Map
  • les utilisant comme paramètre template
  • leur attribuant une valeur null
  • les utiliser d'une manière plus générale (par exemple Long comme Number)

Exemples:

new ArrayList<Integer>();
Long id = null;
Number num = new Long( 3 );

Autres conseils

La raison d'être entier, booléen, et ainsi de suite est de permettre aux types primitifs à être utilisés dans des contextes qui nécessitent un type de référence. Le cas d'utilisation classique est l'API de collecte qui fournissent des ensembles, des listes, des cartes, des files d'attente et ainsi de suite où le type d'élément doit être un certain type de référence.

Ainsi, je peux écrire:

List<Integer> list = new ArrayList<Integer>();

mais ce qui suit est une erreur de compilation:

List<int> list = new ArrayList<int>();

Notez que ce cas d'utilisation pour les types wrapper primitives antidate les deux types génériques et les collections « nouvelles » API, et remonte à l'époque où les seuls types de collections étaient les formes originales (pré-générique) de Vector et Hashtable , et leurs semblables.

Parfois, vous avez vraiment besoin d'une valeur à annulable, par exemple si votre application stocke des données utilisateur, un # de sécurité sociale peuvent être inconnus. Dans ce cas, il est plus propre à stocker null au lieu de -1.

Il y a aussi des choses que vous ne pouvez pas faire avec les types primitifs, comme les stocker dans une carte ou d'un polymorphisme en utilisant (Double et Integer les deux sont des instances de Number).

primitives sont toujours plus rapides.
mais il y a des moments, lorsque les objets sont vraiment utiles:
1. transtypage ascendant. Votre fonction peut prendre Number (est un parent pour tous les objets numériques: entiers, flottants, etc.). Pour un argument
2. Valeur nulle possible. Par exemple, il est utilisé pendant le stockage dans la base de données. Object peut être nul, les primitives doivent avoir une valeur. Donc, si le champ dans db est annulable, il est préférable à la version de l'objet utilisation de la valeur primitive.
3. si la fonction prend objet et vous donne toujours une primitive il y a des dépenses sur autoboxing (rotation primitive en objet). La même chose pour le retour de la fonction.
4. Les objets ont certaines méthodes, comme GetHashCode (), toString (), etc., ce qui peut être très utile dans certains cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top