2012-12-22 19 views
5

Auf einer sehr abstrakten Ebene weiß ich, dass Wrapper-Klassen, ein Objekt des primitiven Datentyps erstellen, aber ich war neugierig, warum wir Wrapper-Klassen verwenden müssen und welche Vorteile sie bieten über primitive Datentypen an.Vorteile der Verwendung von Wrapper-Klassen gegenüber Primitiven in Java

+1

Du kannst einen Blick auf http://stackoverflow.com/questions/1570416/ werfen when-to-use-wrapper-class-und-primitive-type und http://stackoverflow.com/questions/2509025/when-to-use-primitive-and-when-reference-types-in-java – Swapnil

Antwort

7

Sammlungen an erster Stelle, zum Beispiel List<Integer>, können Sie nicht primitive int hier verwenden. Eigentlich jede generische Klasse/Schnittstelle, die mit verschiedenen Objekttypen wie

public interface Callable<V> { 
    V call() throws Exception; 
} 

Hinweis arbeiten können, dass Verpackung am besten nicht mit neuen Integer erfolgt (i) aber Integer.valueOf (i) die letztere wird versuchen, Cache zu verwenden. Das Entpacken erfolgt als Integer.intValue(). Diese Verpackung/Abwickeln von Primitiven sind so typische Operationen, die Java 5 Autoboxing eingeführt/Unboxing

List<Integer> list = new ArrayList<>(); 
list.add(1); 
int i = list.get(0); 

dieser Code wird automatisch konvertiert von Java-Compiler in

list.add(Integer.valueIf(1)); 
int i = list.get(0).intValue(); // this is where NullPointerException sometimes happens 
1

Ein Wrappertyp ermöglicht es einem Primitiv, mehr Kontextbedeutung zu haben. Zum Beispiel kann eine ganze Zahl alles sein, während eine Klasse mit dem Namen Stunden zum Beispiel die Zahl Bedeutung gibt, wo immer sie verwendet wird.

Sie ermöglichen auch das Schreiben von Methoden, die das genannte Primitiv auf konsistente und naheliegende Weise zu Verbrauchern mutieren. Weitere Informationen zu diesem Punkt finden Sie unter Domain Driven Design.

+1

Also würde Es genügt zu sagen, dass Wrapper keine bessere Leistung als der primitive Datentyp bietet, es fügt nur eine kontextuelle Bedeutung zu einem Datentyp hinzu? – veepsk

0

Die primitiven Typen nur Wert halten, die Wrapper-Klasse gibt ihm einen Namen.

Mit einem Klassennamen kann der Compiler statische Prüfungen für Sie durchführen. Es macht die Schnittstelle sinnvoller. Und Sie können auch eine Methode in Wrapperklassen definieren, um die primitiven Werte zu validieren.

Normalerweise, für ein kleines Projekt, denke ich, verwenden primitive Typen ist in Ordnung.

0

Wrapper-Objekte sind normale Objekte und ihre Referenzen können null sein. Dies ermöglicht die Verwendung eines Zustands "nicht gesetzt", der mit Grundelementen unmöglich ist.

Integer no = null; // not set 

Sie müssen einen magischen Wert wie -1 verwenden, um anzugeben, dass eine primitive Variable "nicht gesetzt" ist.

2

Wrapper-Klassen wurden entwickelt, um den primitiven Typen mehr Funktionalität hinzuzufügen, sodass sie mit generischem Code kompatibel sind und das Collection Framework und viele andere Vorteile nutzen. Sie sind jedoch nicht zu ersetzen primitive Typen.

Daher sollten Sie Wrapper nur bei Bedarf verwenden, z. B. beim Umgang mit Generika, da das Erstellen eines Objekts erhebliche Mehrkosten für Ihr Programm verursacht. Im Normalfall sollten Sie also bei Primitiven bleiben.

0

Stellen Sie sich vor: Sie spielen ein Spiel, in dem Sie den Status speichern müssen und Sie möchten auf einem anderen Computer spielen (gleiches Spiel), dann haben Sie sich entschieden, den Status (Level) auf den anderen Computer zu nehmen Zustand (nicht von Anfang an). Okay, komm zu den Fragen, wenn dein aktueller Waffenstatus 3 ist. wie {int waffen = 1; if (Sie fügen Waffen hinzu, indem Sie einige Level spielen, jetzt ist es 3)}, aber Sie können es nicht als Objekt speichern, da die Grundelemente anders sind (lebt im Stapel).also brauchst du Waffen als Objekte ( ) Integer weapon = new Ganzzahl (1) {...}

Verwandte Themen