Wrapper-klassen

Status
Nicht offen für weitere Antworten.

UdoKessler

Mitglied
Moin,

bin jetzt beim Thema Wrapperklassen u hätte 1 o 2 Fragen..

Primitive Datentypen sind ja keine Objekte, dafür gibt es die Wrapperklassen.
Packt man die primitves in Wrapper, dann kann man Methoden wie z.B.
objektname.toString(); usw. anwenden.
Ist das der einzige Grund sie zu wrappen?
Denn ich könnte ja auch so schreiben: Integer.toString(primitive).

Und wenn ich das tue:

int i = 1;
String s = Integer.toString(i);

..wird dann intern das i ge-wrappt, in String verwandelt und das wrapper-objekt
danach gleich für den Garbage Collector freigegeben?
(Das i bleibt ja primitiv und s enthält "1", aber eine Referenz auf das (evtl intern
erstellte) i-objekt habe ich nicht.)




Dann schreibt er (Javainsel) weiter unten:

Zitat:
3.8.7 Autoboxing: Boxing und Unboxing

Der Compiler konvertiert nach festen Regeln, und auch die Operatoren ++, -- sind
erlaubt.

Code:
Integer i = 12; 
i = i + 1;                   // (1) 
i++;                         // (2) 
System.out.println( i );     // 14
Wichtig ist, dass weder (1) noch (2) das Original-Integer-Objekt mit der 12 ändern
(alle Wrapper-Objekte sind immuntable), sondern i nur andere Integer-Objekte für 13
und 14 referenziert.

Zitat-Ende


Frage: Was passiert dann mit dem ursprünglichen i-objekt, das 12 enthält? Garbage
Collector?


Noch eine Frage:
Ist >>Integer i = 1;<< und >>Integer i = new Integer( 1 );<< das selbe?


Danke schonmal
und frohe Ostern :)

Gruß
Udo

.
 

Illuvatar

Top Contributor
Moin,

bin jetzt beim Thema Wrapperklassen u hätte 1 o 2 Fragen..

Primitive Datentypen sind ja keine Objekte, dafür gibt es die Wrapperklassen.
Packt man die primitves in Wrapper, dann kann man Methoden wie z.B.
objektname.toString(); usw. anwenden.
Ist das der einzige Grund sie zu wrappen?
Denn ich könnte ja auch so schreiben: Integer.toString(primitive).
Nein. Das wichtigste ist, dass man manchmal gerne primitive Datentypen an einer Stelle verwenden würde, an der nur Objekte erlaubt sind - zum Beispiel als Schlüssel in einer Map-Struktur. Das wäre ohne Wrapperklassen nicht möglich.

Und wenn ich das tue:

int i = 1;
String s = Integer.toString(i);

..wird dann intern das i ge-wrappt, in String verwandelt und das wrapper-objekt
danach gleich für den Garbage Collector freigegeben?
(Das i bleibt ja primitiv und s enthält "1", aber eine Referenz auf das (evtl intern
erstellte) i-objekt habe ich nicht.)
Äh - nein. Hier wird kein Objekt von einer Wrapperklasse erstellt. Die Methode Integer.toString erwartet ein int-Argument - kein Integer-Argument. Die Methode ist zwar in der Wrapperklasse untergebracht, aber statisch! Das ist nur eine Hilfsmethode, um einen int direkt in einen String zu wandeln - ohne irgendwelche Integer-Objekte.


Dann schreibt er (Javainsel) weiter unten:

Zitat:
3.8.7 Autoboxing: Boxing und Unboxing

Der Compiler konvertiert nach festen Regeln, und auch die Operatoren ++, -- sind
erlaubt.

Code:
Integer i = 12; 
i = i + 1;                   // (1) 
i++;                         // (2) 
System.out.println( i );     // 14
Wichtig ist, dass weder (1) noch (2) das Original-Integer-Objekt mit der 12 ändern
(alle Wrapper-Objekte sind immuntable), sondern i nur andere Integer-Objekte für 13
und 14 referenziert.

Zitat-Ende


Frage: Was passiert dann mit dem ursprünglichen i-objekt, das 12 enthält? Garbage
Collector?
Eigentlich - ja. In diesem Sonderfall allerdings nicht. Warum, siehe nächster Punkt.

Noch eine Frage:
Ist >>Integer i = 1;<< und >>Integer i = new Integer( 1 );<< das selbe?
Nein. >>Integer i = 1;<< ist das gleiche wie >>Integer i = Integer.valueOf(1)<<. Der Unterschied ist, dass >>new Integer(...)<< immer ein neues Objekt erstellt. Aus Performancegründen werden die Integer-Objekte bis 256 (256 ist geraten, das müsste ich nachschauen) immer gespeichert. Deshalb sollte man immer valueOf verwenden, weil eventuell kein neues Objekt erzeugt werden muss.
Edit: hab nachgeschaut - gecached werden Integer-Objekte für Werte von -128 bis 127

Danke schonmal
und frohe Ostern :)

Gleichfalls
 

fjord

Bekanntes Mitglied
Ist das der einzige Grund sie zu wrappen?
Nein. Wrapping von Primitiven wird zum Beispiel für generische Klassen benötigt. Maps, Sets usw. Ansonsten müsste man sie für alle Primitiven nochmal implementieren.

Und wenn ich das tue:

int i = 1;
String s = Integer.toString(i);

..wird dann intern das i ge-wrappt, in String verwandelt und das wrapper-objekt
danach gleich für den Garbage Collector freigegeben?
[highlight=java]public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(0, size, buf);
}[/highlight]
Also kein Wrapping.

Och mann, zu spät. Dann kann ich ja auch aufhören weiterzuschreiben. :(

ps: Die Immutable Wrapper, wie unter anderem auch String, sollte man grundsätzlich nicht mit new erzeugen, weil man damit die Wiederverwendung der Objekte verhindert.
 
Zuletzt bearbeitet:

UdoKessler

Mitglied
Dankeschön!
Habt mir echt geholfen..

Endlich ergibt auch das Wort "valueOf" für mich einen Sinn :)

Ich muss mich da erst an all die neuen Dinge gewöhnen..denke ich.



Grüße
Udo
 

hdi

Top Contributor
Noch eine Ergänzung zu diesem speziellen Verhalten von Wrapper-Objekten, da wir das neulich schon mal hatten:
Eig. erwartet man dass ein == Vergleich auf zwei Wrapper-Objekten niemals true ergibt, da sie Immutable sind. Bei Double-, Float- und Long-Objekten trifft das auch zu.
Boolean- und Byte- Objekte sind immer ==, wenn sie durch Boxing erstellt wurden.

Character, Short und Integer verhalten sich ähnlich zu Boolean und Bytes, aber mit Einschränkungen:
Bei Characters nur von \u0000 bis \u007f (letzeteres entspricht 127)
Bei Short und Integer nur von -128 bis 127

Noch eine Info am Rande, wo wir schon dabei sind: Beim == Vergleich von Wrapper und Primitiv wird der Primitiv aus dem Wrapper gezogen und mit dem Primitiv verglichen. D.h.
3 == new Integer(3) ergibt true

mfg
 

fjord

Bekanntes Mitglied
Eig. erwartet man dass ein == Vergleich auf zwei Wrapper-Objekten niemals true ergibt, da sie Immutable sind. Bei Double-, Float- und Long-Objekten trifft das auch zu.
Warum sollte man das gerade von Immutable Objekten erwarten? Die Aussage stimmt so auch nicht. [highlight=java]Long a = 5L;
Long b = 5L;
System.out.println(a == b);
// gibt true aus[/highlight]
 

hdi

Top Contributor
Hey... dieses besch** "Study-Guide" kotzt mich so an :( Ich hab jetzt schon soviel falsches dadurch gelernt... Die schreiben eine Sache hin, und man weiss nie worauf die sich grad beziehen. Oft meinen sie eine Aussage nur im jetzigen Kontext, oft aber nicht, und man weiss nie, was jetzt zutrifft. Das ist mir jetzt echt schon mit dem 10.Thema passiert. Verdammt noch mal -.- Was ist das für ein Schrott. Ich hab grad nachgelesen, dort steht eiskalt nur:

Two wrapper objects of the following classes will always be == true, if they have the same value and were created through boxing:

Boolean, Byte, Character, Short, Integer.

Feritg, dann beginnt ein neues Kapitel...
Das hieß für mich: Long, Double und Float legen dieses Verhalten nicht an den Tag.
Tolle Sache, das ist jetzt schon so oft passiert, ich glaube langsam dieses Buch bereitet mich null auf die Prüfung vor. Ich denke ich verstehe alles, weil ich es hinnehme wie es dort steht, und musste jetzt schon so oft feststellen dass das einfach nur Bullshit ist, der da steht. Total aus dem Kontext gerissen oder unvollständig. Geil.... :( Ich lerne da zwar Neues, aber nur Falsches scheint es mir :(

Sorry also für die falsche Aussage.. Ich glaube ich werd Ebenius dafür bezahlen müssen dass er sich am Ende meine Zusammenfassug anschaut und den ganzen Mist korrigiert, den ich mir da aufgeschrieben hab :bahnhof:
 
Zuletzt bearbeitet:

UdoKessler

Mitglied
@hdi

Darfst Du denn nicht ein anderes "normales" Buch zum lernen benutzen?

Sorry also für die falsche Aussage..
Kein Problem, die Anderen habens ja aufgeklärt!
Ich nehm das keinem Übel..hab selbst
auch schon genug Stuss gepostet in meinem Leben :)

Gruß
Udo
 

hdi

Top Contributor
Na klar kann ich ein anderes Buch nehmen. Ist ja keine Schule, nur ein Test. Aber in normalen Lehrbüchern über Java stehen solche Dinge natürlich nicht. SCJP heisst JLS fressen... Und genau das wäre ne Alternative, die JLS. Aber ernthaft: Wer kann sich das denn von vorne bis hinten drücken? Immerhin ist das kein Buch, sondern eine Dokumentation. Ich werd das Study Guide durchmachen, und am Ende nochmal alles in der Praxis testen müssen, um Verständnisfehler zu entdecken.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Wrapper Klassen Java Basics - Anfänger-Themen 6
L OOP Wrapper Klassen - Stack-Aufgabe Java Basics - Anfänger-Themen 2
T Wrapper-Klassen Java Basics - Anfänger-Themen 5
A Wrapper-Klassen Java Basics - Anfänger-Themen 5
123456789sssssaaaa Java Wrapper Class Java Basics - Anfänger-Themen 13
S Erste Schritte Funktionsaufruf mit Wrapper Java Basics - Anfänger-Themen 4
3 ArrayList Integer Wrapper Klasse als Ersatz für normale Arrays Java Basics - Anfänger-Themen 10
R Einige Neulingsfragen (Wrapper, GUI-Programmierung) Java Basics - Anfänger-Themen 4
S Wrapper Klasse und extends Java Basics - Anfänger-Themen 2
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
B guter Jar-Wrapper Java Basics - Anfänger-Themen 13
F OOP Wrapper ermöglicht Zugriff für andere Packages? Java Basics - Anfänger-Themen 6
M wrapper dll Java Basics - Anfänger-Themen 3
J Java.Util.Properties wrapper class (Review Request) Java Basics - Anfänger-Themen 2
S Methode die Wrapper Klasse fuer einen primitiven Typ zurueck Java Basics - Anfänger-Themen 11
N Was ist eine Wrapper Klasse ? Java Basics - Anfänger-Themen 2
S Wrapper-Pattern Beispiel Java Basics - Anfänger-Themen 2
G Frage zur Objekt-Wrapper Float ? Java Basics - Anfänger-Themen 6
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben