Frage

Ich habe von Arten gehört zu werden bezeichnet als „boxed“ in einigen Sprachen.

In Java, ich habe gehört, von "Autoboxing". Was ist das? Ist mit ihm Wrapper-Klassen für eine Art? Wie mein Code ändern würde, wenn ich mit boxed oder unboxed Typen zu arbeiten?

War es hilfreich?

Lösung

Einige Datentypen als „primitiv“, das heißt, sie nicht wie ein Objekt behandelt werden und nicht über die Eigenschaften eines Objekts.

Auf den meisten Plattformen ganze Zahlen und Zeichen Beispiele für Typen sind, die primitiv sind, aber verpackt werden.

Boxen bedeutet sie in einem Objekt Einwickeln, so dass sie das Verhalten eines Objekts haben.

Die genaue Bedeutung und Verhalten hängt von der Sprache Sie verwenden. Einige Sprachen (wie Smalltalk ... zumindest waaay zurück, wenn ich es tat ...) lassen keine primitiven Typen und betrachten alles, was ein Objekt zu sein, aber es gibt eine Leistungseinbuße damit verbunden, weil am Ende zu tun, nützliche Arbeit des Tages muss der Prozessor mit rohen Zahlen und rohen Speicher arbeiten. Wenn Sie zwei ganze Zahlen hinzufügen möchten, die zum Beispiel verpackt wurden, hinter den Kulissen sie „unboxed“ in primitive Typen sind, werden die Zahlen addiert, und sie werden dann wieder in eine neue ganze Zahl eingerahmt.

Andere Tipps

Weitere spezifische Informationen für Java:

Autoboxing ermöglicht Java automatisch Dinge zu konvertieren wie boolean und int ihre Objektversionen Boolean und Integer automatisch in den meisten Fällen. Es ermöglicht auch das Gegenteil passieren.

Zum Beispiel:

int a = 3; // no boxing is happening
Integer b = 3;  // newer versions of java automatically convert the int 3 to Integer 3
int c = b;  // these same versions also automatically convert Integer 3 to int 3

Ältere Versionen von Java, die die gleiche Sache nicht Autoboxing haben diesen Code benötigen zu tun:

int a = 3;  // works the same
Integer b = new Integer(3);  //must set up a Integer object manually
int c = b.intValue(); //must change Integer object to a primitive

Es gibt jedoch einige Situationen, in denen man noch Dinge tun müssen manuell. Zum Beispiel stellen Sie sich eine Klasse mit zwei Methoden haben in etwa so:

assertEquals(int a, int b);
assertEquals(Object a, Object b)

Nun, wenn Sie versuchen, dies zu tun:

Integer a = 3;
int b = 3;
assertEquals(a, b);  // this will not compile

Der Grund, warum dies nicht der Fall funktioniert, weil es nicht herausfinden kann, ob es a zu einem int oder Box b zu einem Integer unbox sollte. Deshalb ist es nicht eindeutig, welche Methode Signatur aufgerufen werden soll. Um dies zu beheben Sie eine dieser Möglichkeiten:

assertEquals((int) a, b);
assertEquals(a, (Integer) b);

Ja, Box bedeutet einen Werttyp zu nehmen und es in einem Referenztyp Verpackung. Da Java eingeführt Autoboxing können Sie tun:

void foo(Object bar) {}
//...
    foo(1);

Und Java wird automatisch die int 1 in eine Integer drehen. In früheren Versionen würden Sie tun müssen:

foo(new Integer(1));

Autoboxing ist besonders nützlich in Java, wenn sie mit Generika arbeiten, da Sie nicht Primitiven mit Generika, so zum Speichern Ints in einer Liste verwenden können, würden Sie einen List<Integer> machen und setzen die Ints in die Liste eingerahmt.

A geschachtelten Art bedeutet, dass die Werte in einem Block auf der Halde und referenzierten über einen Zeiger zugeordnet sind. Das ist gut für Einheitlichkeit bei der Umsetzung der Common Language Runtime (es macht es einfacher, generische Funktionen haben, usw.), auf Kosten eines zusätzlichen Indirektion.

Im Allgemeinen, wenn Sie arbeiten mit Sammlungen, sind Sie mit Arrays von Objekten zu tun. In Sprachen wie Java, gibt es einen Unterschied zwischen einem primitiven und einem Objekt. Wenn ein primitiven „boxed“ ist, ist es im Wesentlichen nur ein Wrapper um einen primitiven, so dass es mit dem Rest des Rahmens schön spielt, die ein Objekt ist zu erwarten.

Autoboxing ist nur die Tat eines primitiven in ein Objekt setzen oder eine primitive aus einem Objekt ziehen transparent, so dass Sie über den zusätzlichen Schritt nicht selbst kümmern müssen, es zu tun.

Boxed bedeutet, dass sie einen regulären Werttyp hat und erstellt ein Objekt um ihn herum. Eine Art, wie es in einem Kasten setzen. Dies wird im Allgemeinen aufgrund des Aufwands für den Bau des Objekts vermieden werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top