2010-05-21 11 views
5

Kann mir jemand die Verwendung von Integer, Boolean usw. anstelle ihrer primitiven Typen in JAVA erklären?Objekt oder primitiver Typ

Ich kann nicht scheinen, die Vorteile zu begreifen, die sie zur Verfügung stellen. Sie scheinen unnötige Probleme beim Umgang mit Nullwerten zu verursachen.

Danke!

Antwort

8

, Integer, , ... sind Objekte. Sie können sie an Orten verwenden, an denen Sie keine primitiven Typen verwenden können, z.

  • speichert sie in einer Sammlung wie ein Map
  • sie als Template-Parameter unter Verwendung von
  • Zuweisen ihnen einen null Wert
  • sie in allgemeinerer Art und Weise (zB Long als Number)

Beispiele:

+0

Um die Antwort hinzuzufügen, wird ein praktisches Beispiel Variablen im Sitzungskontext in einer Web-App speichern. – saugata

+0

Nicht nur Map, alle Container-Klassen benötigen ihre Elemente als Objekt, daher kann der primitive Typ diese Bedingung nicht erfüllen. Und Container, denke ich, ist ein Aspekt, wo objektorientierte Sprache die Prozedursprache überwältigt, die Ihnen viel Bequemlichkeit bringt. :-) –

4

Das Grundprinzip für Integer, Boolean usw. ist es, primitive Typen in Kontexten zu verwenden, die einen Referenztyp benötigen. Der klassische Anwendungsfall sind die Collection-APIs, die Sets, Listen, Maps, Queues usw. bereitstellen, wobei der Elementtyp ein Referenztyp sein muss.

So kann ich schreiben:

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

aber die folgende ist ein Übersetzungsfehler:

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

Beachten Sie, dass dieser Anwendungsfall für die primitiven Wrapper-Typen früher sowohl generische Typen und die „neuen "Sammlungen APIs, und geht zurück zu den Tagen, wo die einzigen Sammlertypen waren die ursprünglichen (vor-generischen) Formen von Vector und Hashtable und ihresgleichen.

4

Manchmal ist es wirklich erforderlich, dass ein Wert nullfähig ist. Wenn Ihre App z. B. Benutzerdaten speichert, kann eine Sozialversicherung # unbekannt sein. In diesem Fall ist es sauberer, null statt -1 zu speichern.

Es gibt auch Dinge, die Sie nicht mit primitiven Typen tun können, wie das Speichern in einer Map oder das Verwenden von Polymorphismen (Double und Integer sind beide Instanzen von Number).

1

Primitive sind immer schneller.
jedoch gibt es Zeiten, wenn Objekte wirklich nützlich sind:
1. Upcasting. Ihre Funktion kann Number (ist ein Parent für alle numerischen Objekte: Integer, Float usw.) für ein Argument übernehmen.
2. Möglicher Nullwert. Zum Beispiel wird es beim Speichern in der Datenbank verwendet. Objekt kann null sein, Grundelemente müssen einen Wert haben. Wenn das Feld in db NULL-Werte zulässt, ist es besser, die Objektversion des primitiven Werts zu verwenden.
3. Wenn die Funktion ein Objekt nimmt und Sie ihr immer ein Primitiv geben, entstehen Kosten für das Autoboxing (Primitive in Objekt umwandeln). Das Gleiche für die Rückkehr von der Funktion.
4. Objekte haben bestimmte Methoden wie getHashcode(), toString() usw., was in einigen Fällen sehr nützlich sein kann.

Verwandte Themen