Boxing/Unboxing in Java
-
Hio
Ich habe mal eine Frage zu Boxing/Unboxing in Java. Folgender Beispielcode:Integer i1 = 10; Integer i3; int i2 = 5; i3 = i1+i2;
Folgender Code soll das Boxing manuell machen:
Integer i1 = new Integer(10); Integer i3 = new Integer(); i2 = 5; i3 = new Integer(i1.intValue() + i2);
So Richtig?
Gruß
Pille
-
naja, es reicht auch wenn du mit i3 nur 1 objekt erzeugst
Integer i1 = new Integer(10); int i2 = 5; Integer i3 = new Integer( i1.intValue() + i2 );
Aber ob der Compiler aus
int i = 7; Integer i2 = i;
das
int i = 7; Integer i2 = new Integer(i);
oder das
int i = 7; Integer i2 = Integer.valueOf(i);
macht, weiß ich auch net^^
-
ahaaa habe eben folgendes gefunden:
valueOf(int) : it might return you an existing object rather than creating a new instance.
Denmach denke ich der Compiler benutzt auf jeden Fall "valueOf(i)" statt "new Integer(i)" ... spart ja Speicherplatz xD
-
Dweb schrieb:
naja, es reicht auch wenn du mit i3 nur 1 objekt erzeugst
Hehe das ist klar, ich wollte es nur mal rein schematisch aufschreiben. Der Compiler wird da denke ich eh ne Menge noch rumoptimieren Aber danke, nun weiss ich wies läuft.
-
Aus "Java ist auch eine Insel" Kapitel 8.2.7 Autoboxing: Boxing und Unboxing
int i = 4711; Integer j = i; // steht für j = Integer.valueOf(i) int k = j; // steht für k = j.intValue()
folglich stimmt das von pille im "groben" schon, auch wenn eventuell die "new" nicht so ganz richtig sind und ein
i2 = 5;
auch nicht funktioniert, wenn man nicht vorher irgendwo schreibt
int i2;
usw.
-
Das mit dem vergessenen "int" übersehen wir nun mal schön...
Aber wo liegt der Unterschied zwischen:Integer i = 10; //Integer = new Integer(10); Integer j = i; ////Integer j = Integer.valueOf(i); ODER Integer i = 10; //Integer = new Integer(10); Integer j = i; ////Integer j = new Integer(i.intValue());
Der Compiler wird wahrscheinlich ersteres bauen, aber im Prinzip gibt es doch keinerlei Unterschied, ob der Compiler nun das Objekt selber erzeugt oder sich ein entsprechend Objekt von valueOf() zurückgeben lässt - in dem Fall würde valueOf() das Objekt einfach erzeugen.
Oder gibt valueOf() eine Referenz und keine Kopie von i zurück?
-
auf die frage gab es glaub ich von dweb weiter oben schon eine antwort oder?
Dweb schrieb:
ahaaa habe eben folgendes gefunden:
valueOf(int) : it might return you an existing object rather than creating a new instance.
Denmach denke ich der Compiler benutzt auf jeden Fall "valueOf(i)" statt "new Integer(i)" ... spart ja Speicherplatz xD
-
Übrigens... hierbei erzeugst du sowieso nur 1 Objekt^^
Integer i = 10; // i ist eine Reference, die auf ein Integer-Objekt verweist Integer j = i; // j ist eine Reference, die auf das selbe Integer-Objekt wie "i" verweist.