diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100066.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100066.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100066.html | 637 |
1 files changed, 637 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100066.html b/Master/Reference Architectures and Patterns/hjp5/html/k100066.html new file mode 100644 index 0000000..1a6d353 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100066.html @@ -0,0 +1,637 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100064.html;106,k100065.html;107,k100067.html;108,k100070.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100064.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100065.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100067.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100070.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 10 - OOP IV: Verschiedenes
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="wrapperklassen"></a>
+<h2>10.2 <a name="ixa100573">Wrapper-Klassen</a></h2>
+<hr>
+<ul>
+<li><a href="k100066.html#wrapperklassen">10.2 Wrapper-Klassen</a>
+<ul>
+<li><a href="k100066.html#sectlevel3id010002001">10.2.1 Vordefinierte Wrapper-Klassen</a>
+<ul>
+<li><a href="k100066.html#sectlevel4id010002001001">Instanzierung</a>
+<li><a href="k100066.html#sectlevel4id010002001002">Rückgabe des Wertes</a>
+<li><a href="k100066.html#sectlevel4id010002001003">Parsen von Strings</a>
+<li><a href="k100066.html#sectlevel4id010002001004">Konstanten</a>
+</ul>
+<li><a href="k100066.html#sectlevel3id010002002">10.2.2 Call by Reference</a>
+<li><a href="k100066.html#autoboxing">10.2.3 Autoboxing und Autounboxing</a>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id010002001"></a>
+<h3>10.2.1 Vordefinierte Wrapper-Klassen </h3>
+
+<p>
+Zu jedem primitiven Datentyp in Java gibt es eine korrespondierende
+<i>Wrapper</i>-Klasse. Diese kapselt die primitive Variable in einer
+objektorientierten Hülle und stellt eine Reihe von Methoden zum
+Zugriff auf die Variable zur Verfügung. Zwar wird man bei der
+Programmierung meist die primitiven Typen verwenden, doch gibt es
+einige Situationen, in denen die Anwendung einer Wrapper-Klasse sinnvoll
+sein kann:
+<ul>
+<li>Das Paket <a href="index_j.html#ixb100127"><font color=#000080><tt>java.util</tt></font></a>
+stellt eine Reihe von Verbundklassen zur Verfügung, die beliebige
+Objekttypen speichern können. Um darin auch elementare Typen
+ablegen zu können, ist es notwendig, anstelle der primitiven
+Typen ihre Wrapper-Klassen zu verwenden.
+<li>Da Objektreferenzen den Wert <font color="#000077"><tt>null</tt></font>
+haben können, kann die Verwendung der Wrapper-Klassen beispielsweise
+bei der Datenbankprogrammierung nützlich sein. Damit lassen sich
+primitive Feldtypen darstellen, die NULL-Werte enthalten können.
+<li>Das Reflection-API (siehe <a href="k100271.html#kapitelreflection">Kapitel 43</a>)
+verwendet Wrapper-Klassen zum Zugriff auf Membervariablen oder Methodenargumente
+primitiver Typen.
+</ul>
+
+<p>
+Wrapper-Klassen existieren zu allen numerischen Typen und zu den Typen
+<a href="index_c.html#ixb100215"><font color=#000080><tt>char</tt></font></a>
+und <a href="index_b.html#ixb100072"><font color=#000080><tt>boolean</tt></font></a>:
+<a name="tableid010001"></a>
+<p>
+<table cols=2 border width=66%>
+
+<tr>
+<td valign=top align=left width=50%><b>Wrapper-Klasse</b></td>
+<td valign=top align=left width=50%><b>Primitiver Typ </b></td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100574"><a href="index_b.html#ixb100465"><font color=#000080><tt>Byte</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100575"><a href="index_b.html#ixb100242"><font color=#000080><tt>byte</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100576"><a href="index_s.html#ixb100466"><font color=#000080><tt>Short</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100577"><a href="index_s.html#ixb100243"><font color=#000080><tt>short</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100578"><a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100579"><a href="index_i.html#ixb100244"><font color=#000080><tt>int</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100580"><a href="index_l.html#ixb100467"><font color=#000080><tt>Long</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100581"><a href="index_l.html#ixb100245"><font color=#000080><tt>long</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100582"><a href="index_d.html#ixb100255"><font color=#000080><tt>Double</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100583"><a href="index_d.html#ixb100247"><font color=#000080><tt>double</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100584"><a href="index_f.html#ixb100254"><font color=#000080><tt>Float</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100585"><a href="index_f.html#ixb100246"><font color=#000080><tt>float</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100586"><a href="index_b.html#ixb100468"><font color=#000080><tt>Boolean</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100587"><a href="index_b.html#ixb100072"><font color=#000080><tt>boolean</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100588"><a href="index_c.html#ixb100469"><font color=#000080><tt>Character</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100589"><a href="index_c.html#ixb100215"><font color=#000080><tt>char</tt></font></a></a>
+</td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100590"><a href="index_v.html#ixb100470"><font color=#000080><tt>Void</tt></font></a></a></td>
+<td valign=top align=left><a name="ixa100591"><a href="index_v.html#ixb100334"><font color=#000080><tt>void</tt></font></a></a>
+</td></tr>
+</table>
+<p><i>
+Tabelle 10.1: Die Wrapper-Klassen </i></p>
+
+
+<!-- Section -->
+<a name="sectlevel4id010002001001"></a>
+<h4>Instanzierung </h4>
+
+<p>
+Die Instanzierung einer Wrapper-Klasse kann meist auf zwei unterschiedliche
+Arten erfolgen. Einerseits ist es möglich, den korrespondierenden
+primitiven Typ an den Konstruktor zu übergeben, um ein Objekt
+desselben Werts zu erzeugen. Alternativ kann meist auch ein String
+an den Konstruktor übergeben werden. Dieser wird in den entsprechenden
+primitiven Typ konvertiert und dann zur Initialisierung der Wrapper-Klasse
+verwendet.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public Integer(int i)
+
+public Integer(String s)
+ throws NumberFormatException
+
+public Long(long l)
+
+public Long(String s)
+ throws NumberFormatException
+
+public Float(float f)
+
+public Float(double d)
+
+public Float(String s)
+ throws NumberFormatException
+
+public Double(double d)
+
+public Double(String s)
+ throws NumberFormatException
+
+public Boolean(boolean b)
+
+public Boolean(String s)
+
+public Character(char c)
+</pre>
+</font>
+</td>
+</tr>
+</table>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Das in diesem Beispiel mehrfach verwendete Schlüsselwort <a name="ixa100592"><a href="index_t.html#ixb100471"><font color=#000080><tt>throws</tt></font></a></a>
+deklariert <i>Ausnahmen</i>, die während der Methodenausführung
+auftreten können. Sie entstehen durch Programmfehler, undefinierte
+Zustände oder treten auf, wenn unvorhergesehene Ereignisse eintreten
+(Datei nicht verfügbar, Speicher erschöpft oder ähnliches).
+Wir werden uns in <a href="k100078.html#kapitelexceptions">Kapitel 12</a>
+ausführlich mit diesem Thema beschäftigen.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel4id010002001002"></a>
+<h4>Rückgabe des Wertes </h4>
+
+<p>
+Die meisten Wrapper-Klassen besitzen zwei Methoden, um den internen
+Wert abzufragen. Eine der beiden liefert ihn passend zum korrespondierenden
+Grundtyp, die andere als <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>.
+Der Name von Methoden der ersten Art setzt sich aus dem Namen des
+Basistyps und der Erweiterung <font color="#000077"><tt>Value</tt></font>
+zusammen, beispielsweise <a name="ixa100593"><a href="index_c.html#ixb100472"><font color=#000080><tt>charValue</tt></font></a></a>,
+<a name="ixa100594"><a href="index_b.html#ixb100473"><font color=#000080><tt>booleanValue</tt></font></a></a>
+oder <a name="ixa100595"><a href="index_i.html#ixb100474"><font color=#000080><tt>intValue</tt></font></a></a>.
+Die numerischen Methoden <a href="index_i.html#ixb100474"><font color=#000080><tt>intValue</tt></font></a>,
+<a name="ixa100596"><a href="index_l.html#ixb100475"><font color=#000080><tt>longValue</tt></font></a></a>,
+<a name="ixa100597"><a href="index_f.html#ixb100476"><font color=#000080><tt>floatValue</tt></font></a></a>
+und <a name="ixa100598"><a href="index_d.html#ixb100477"><font color=#000080><tt>doubleValue</tt></font></a></a>
+stehen dabei für alle numerischen Wrapper-Klassen zur Verfügung.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public boolean booleanValue()
+public char charValue()
+public int intValue()
+public long longValue()
+public float floatValue()
+public double doubleValue()
+</pre>
+</font>
+</td>
+</tr>
+</table>
+
+<p>
+Der Name der Methode, die den internen Wert als <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
+zurückgibt, ist <a name="ixa100599"><a href="index_t.html#ixb100327"><font color=#000080><tt>toString</tt></font></a></a>.
+Diese Methode steht in allen Wrapper-Klassen zur Verfügung:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public String toString()
+</pre>
+</font>
+</td>
+</tr>
+</table>
+
+<p>
+Ein einfaches Beispiel für die Anwendung der Wrapper-Klassen
+zeigt folgendes Listing:
+<a name="wrapperklassenohneab"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1005.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1005
+<font color="#555555">004 </font>{
+<font color="#555555">005 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> ohneAutoboxing(<font color="#006699">int</font> arg)
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> Integer i = <font color="#0000AA">new</font> Integer(arg);
+<font color="#555555">008 </font> <font color="#006699">int</font> j = i.intValue() + 1;
+<font color="#555555">009 </font> System.out.println(i + <font color="#0000FF">" "</font> + j);
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>
+<font color="#555555">012 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">013 </font> {
+<font color="#555555">014 </font> ohneAutoboxing(17);
+<font color="#555555">015 </font> }
+<font color="#555555">016 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1005.java"><font color="#000055" size=-1>Listing1005.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 10.5: Anwendung der Wrapper-Klassen</i></p>
+
+<p>
+Die Methode <font color="#000077"><tt>ohneAutoboxing</tt></font> (warum
+sie so heißt, wird später deutlich werden) erzeugt einen
+<a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a>-Wrapper
+<font color="#000077"><tt>i</tt></font> aus dem als Argument übergebenen
+<a href="index_i.html#ixb100244"><font color=#000080><tt>int</tt></font></a>.
+Dieser wird in einen <font color="#000077"><tt>int</tt></font> zurückkonvertiert
+und nach Addition von 1 der Variablen <font color="#000077"><tt>j</tt></font>
+zugewiesen. Anschließend werden beide Werte ausgegeben:
+<font color="#333300">
+<pre>
+17 18
+</pre>
+</font>
+
+
+<!-- Section -->
+<a name="sectlevel4id010002001003"></a>
+<h4>Parsen von Strings </h4>
+
+<p>
+Neben der Möglichkeit, aus Strings Objekte zu erzeugen, können
+die meisten Wrapper-Klassen auch primitive Datentypen erzeugen. Dazu
+gibt es statische Methoden mit den Namen <a name="ixa100600"><a href="index_p.html#ixb100478"><font color=#000080><tt>parseByte</tt></font></a></a>,
+<a name="ixa100601"><a href="index_p.html#ixb100479"><font color=#000080><tt>parseInt</tt></font></a></a>,
+<a name="ixa100602"><a href="index_p.html#ixb100480"><font color=#000080><tt>parseLong</tt></font></a></a>,
+<a name="ixa100603"><a href="index_p.html#ixb100481"><font color=#000080><tt>parseFloat</tt></font></a></a>
+und <a name="ixa100604"><a href="index_p.html#ixb100482"><font color=#000080><tt>parseDouble</tt></font></a></a>
+in den zugehörigen Klassen <a href="index_b.html#ixb100465"><font color=#000080><tt>Byte</tt></font></a>,
+<a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a>,
+<a href="index_l.html#ixb100467"><font color=#000080><tt>Long</tt></font></a>,
+<a href="index_f.html#ixb100254"><font color=#000080><tt>Float</tt></font></a>
+und <a href="index_d.html#ixb100255"><font color=#000080><tt>Double</tt></font></a>:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public static byte parseByte(String s)
+ throws NumberFormatException
+
+public static int parseInt(String s)
+ throws NumberFormatException
+
+public static long parseLong(String s)
+ throws NumberFormatException
+
+public static float parseFloat(String s)
+ throws NumberFormatException
+
+public static double parseDouble(String s)
+ throws NumberFormatException
+</pre>
+</font>
+</td>
+</tr>
+</table>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Die Methoden <a href="index_p.html#ixb100481"><font color=#000080><tt>parseFloat</tt></font></a>
+und <a href="index_p.html#ixb100482"><font color=#000080><tt>parseDouble</tt></font></a>
+gibt es erst seit dem JDK 1.2. In älteren JDK-Versionen und den
+meisten Web-Browsern stehen sie nicht zur Verfügung.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel4id010002001004"></a>
+<h4>Konstanten </h4>
+
+<p>
+Die numerischen Wrapper-Klassen stellen Konstanten zur Bezeichnung
+spezieller Elemente zur Verfügung. So gibt es in jeder der Klassen
+<a href="index_b.html#ixb100465"><font color=#000080><tt>Byte</tt></font></a>,
+<a href="index_s.html#ixb100466"><font color=#000080><tt>Short</tt></font></a>,
+<a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a>,
+<a href="index_l.html#ixb100467"><font color=#000080><tt>Long</tt></font></a>,
+<a href="index_f.html#ixb100254"><font color=#000080><tt>Float</tt></font></a>
+und <a href="index_d.html#ixb100255"><font color=#000080><tt>Double</tt></font></a>
+die Konstanten <a name="ixa100605"><a href="index_m.html#ixb100260"><font color=#000080><tt>MIN_VALUE</tt></font></a></a>
+und <a name="ixa100606"><a href="index_m.html#ixb100259"><font color=#000080><tt>MAX_VALUE</tt></font></a></a>,
+die das kleinste bzw. größte Element des Wertebereichs
+darstellen. In den Klassen <a href="index_f.html#ixb100254"><font color=#000080><tt>Float</tt></font></a>
+und <a href="index_d.html#ixb100255"><font color=#000080><tt>Double</tt></font></a>
+gibt es zusätzlich die Konstanten <a name="ixa100607"><a href="index_n.html#ixb100258"><font color=#000080><tt>NEGATIVE_INFINITY</tt></font></a></a>,
+<a name="ixa100608"><a href="index_p.html#ixb100257"><font color=#000080><tt>POSITIVE_INFINITY</tt></font></a></a>
+und <a name="ixa100609"><a href="index_n.html#ixb100256"><font color=#000080><tt>NaN</tt></font></a></a>.
+Sie stellen die Werte <i>minus unendlich</i>, <i>plus unendlich</i>
+und <i>undefiniert</i> dar.
+
+<!-- Section -->
+
+<a name="sectlevel3id010002002"></a>
+<h3>10.2.2 Call by Reference </h3>
+
+<p>
+Da Objektparameter im Gegensatz zu primitiven Typen per Referenz übergeben
+werden, wären Wrapper-Klassen <i>prinzipiell</i> geeignet, Methodenparameter
+per <a name="ixa100610"><i>call by reference</i></a> zu übergeben.
+Damit könnten Änderungen von primitiven Parametern an den
+Aufrufer zurückgegeben werden. In der Praxis funktioniert das
+allerdings nicht, denn alle vordefinierten Wrapper-Klassen sind unveränderlich
+(das wird auch als <a name="ixa100611"><i>immutable</i></a> bezeichnet).
+
+<p>
+Sollen primitive Typen per Referenz übergeben werden, bieten
+sich zwei Möglichkeiten an:
+<ul>
+<li>Der primitive Typ kann in einen eigenen Wrapper verpackt werden,
+der das Ändern des Wertes erlaubt.
+<li>Der primitive Typ kann als Element eines Array übergeben
+werden. Da Arrays Objekte sind und somit stets per Referenz übergeben
+werden, sind Änderungen an ihren Elementen auch für den
+Aufrufer sichtbar.
+</ul>
+
+<p>
+Beide Methoden sind nicht sehr elegant, werden aber in der Praxis
+mitunter benötigt. Das folgende Listing zeigt, wie es gemacht
+wird:
+<a name="listingid010006"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1006.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">class</font> IntWrapper
+<font color="#555555">004 </font>{
+<font color="#555555">005 </font> <font color="#0000AA">public</font> <font color="#006699">int</font> value;
+<font color="#555555">006 </font>
+<font color="#555555">007 </font> <font color="#0000AA">public</font> IntWrapper(<font color="#006699">int</font> value)
+<font color="#555555">008 </font> {
+<font color="#555555">009 </font> <font color="#006699">this</font>.value = value;
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>}
+<font color="#555555">012 </font>
+<font color="#555555">013 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1006
+<font color="#555555">014 </font>{
+<font color="#555555">015 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> inc1(IntWrapper w)
+<font color="#555555">016 </font> {
+<font color="#555555">017 </font> ++w.value;
+<font color="#555555">018 </font> }
+<font color="#555555">019 </font>
+<font color="#555555">020 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> inc2(<font color="#006699">int</font>[] i)
+<font color="#555555">021 </font> {
+<font color="#555555">022 </font> ++i[0];
+<font color="#555555">023 </font> }
+<font color="#555555">024 </font>
+<font color="#555555">025 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">026 </font> {
+<font color="#555555">027 </font> <font color="#00AA00">//Variante 1: Übergabe in einem veränderlichen Wrapper</font>
+<font color="#555555">028 </font> IntWrapper i = <font color="#0000AA">new</font> IntWrapper(10);
+<font color="#555555">029 </font> System.out.println(<font color="#0000FF">"i = "</font> + i.value);
+<font color="#555555">030 </font> inc1(i);
+<font color="#555555">031 </font> System.out.println(<font color="#0000FF">"i = "</font> + i.value);
+<font color="#555555">032 </font> <font color="#00AA00">//Variante 2: Übergabe als Array-Element</font>
+<font color="#555555">033 </font> <font color="#006699">int</font>[] j = <font color="#0000AA">new</font> <font color="#006699">int</font>[] {10};
+<font color="#555555">034 </font> System.out.println(<font color="#0000FF">"j = "</font> + j[0]);
+<font color="#555555">035 </font> inc2(j);
+<font color="#555555">036 </font> System.out.println(<font color="#0000FF">"j = "</font> + j[0]);
+<font color="#555555">037 </font> }
+<font color="#555555">038 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1006.java"><font color="#000055" size=-1>Listing1006.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 10.6: Call by Reference</i></p>
+
+
+<!-- Section -->
+<a name="autoboxing"></a>
+<h3>10.2.3 Autoboxing und Autounboxing </h3>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Seit der J2SE 5.0 gibt es einen Mechanismus, der das automatische
+Ein- und Auspacken von primitiven Typen in und aus Wrapper-Klassen
+unterstützt. Dieses als <a name="ixa100612"><i>Autoboxing</i></a>
+bzw. <a name="ixa100613"><i>Autounboxing</i></a> (»automatisches
+Ein- und Auspacken«) bezeichnete Verfahren sorgt dafür,
+dass an vielen Stellen automatisch zwischen primitiven Typen und Wrapperobjekten
+konvertiert wird. Erwartet eine Methode beispielsweise einen <a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a>-Wert
+als Argument, kann außer einem <a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a>
+auch direkt ein <a href="index_i.html#ixb100244"><font color=#000080><tt>int</tt></font></a>
+übergeben werden; und er wird ohne Zutun des Entwicklers in einen
+gleichwertigen <a href="index_i.html#ixb100170"><font color=#000080><tt>Integer</tt></font></a>
+konvertiert. Auch in umgekehrter Richtung funktioniert das, etwa wenn
+in einem arithmetischen Ausdruck ein <a href="index_d.html#ixb100247"><font color=#000080><tt>double</tt></font></a>
+erwartet, aber ein <a href="index_d.html#ixb100255"><font color=#000080><tt>Double</tt></font></a>
+übergeben wird.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Das Beispiel aus <a href="k100066.html#wrapperklassenohneab">Listing 10.5</a>
+kann seit der J2SE 5.0 wie folgt vereinfacht werden:
+<a name="listingid010007"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1007.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1007
+<font color="#555555">004 </font>{
+<font color="#555555">005 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> mitAutoboxing(<font color="#006699">int</font> arg)
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> Integer i = arg;
+<font color="#555555">008 </font> <font color="#006699">int</font> j = i + 1;
+<font color="#555555">009 </font> System.out.println(i + <font color="#0000FF">" "</font> + j);
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>
+<font color="#555555">012 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">013 </font> {
+<font color="#555555">014 </font> mitAutoboxing(<font color="#0000AA">new</font> Integer(17));
+<font color="#555555">015 </font> }
+<font color="#555555">016 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1007.java"><font color="#000055" size=-1>Listing1007.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 10.7: Autoboxing und Autounboxing</i></p>
+
+<p>
+Die Einführung des Autoboxings und Autounboxings hat eine Vielzahl
+von Auswirkungen auf die Java-Sprachspezifikation gebracht. Primitive
+Typen und Wrapper-Objekte können nun in weiten Bereichen fast
+gleichberechtigt benutzt werden. Die mitunter kritisierte, und in
+manchen reinen OO-Sprachen (wie etwa Smalltalk) nicht vorhandene Unterscheidung
+zwischen beiden Gruppen ist für die meisten praktischen Belange
+nun irrelevant.
+
+<p>
+So wird das Autoboxing etwa bei Zuweisungen und Methodenaufrufen angewandt,
+wenn ein Wrapper-Objekt erwartet wird, aber nur ein primitiver Wert
+zur Verfügung steht. Umgekehrt wird ein entsprechender Wrapper
+bei Bedarf automatisch ausgepackt, wenn ein primitiver Wert erwartet,
+aber ein Wrapper-Objekt übergeben wird. Auch innerhalb von Ausdrücken
+können Wrapper-Objekte meist nahtlos anstelle von (und zusammen
+mit) primitiven Werten verwendet werden. Ausnahme sind einige verändernde
+Operatoren wie ++ und -- oder die kombinierten Zuweisungsoperatoren
++= oder -=. Wegen der Nebeneffekte können diese nicht auf (die
+per Definition unveränderlichen) Wrapper-Objekte angewendet werden.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Das obige Beispiel wirkt zugegebenermaßen etwas konstruiert.
+Der wahre Nutzen des Autoboxings und Autounboxings kommt vor allem
+in Synergie mit der erweiterten <a href="index_f.html#ixb100078"><font color=#000080><tt>for</tt></font></a>-Schleife
+und den typisierten Collections zum Tragen. Beispiele finden sich
+etwa in <a href="k100105.html#einfachtypsicher">Listing 15.10</a>
+oder <a href="k100105.html#zweifachtypsicher">Listing 15.12</a>.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100064.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100065.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100067.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100070.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
