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/k100037.html | |
| download | Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100037.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100037.html | 617 |
1 files changed, 617 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100037.html b/Master/Reference Architectures and Patterns/hjp5/html/k100037.html new file mode 100644 index 0000000..ed0e381 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100037.html @@ -0,0 +1,617 @@ +<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,k100030.html;106,k100036.html;107,k100038.html;108,k100040.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="k100030.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100036.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100038.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100040.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 5 - Ausdrücke
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id005007"></a>
+<h2>5.7 <a name="ixa100362">Sonstige Operatoren</a><a name="ixa100363"></a></h2>
+<hr>
+<ul>
+<li><a href="k100037.html#sectlevel2id005007">5.7 Sonstige Operatoren</a>
+<ul>
+<li><a href="k100037.html#sectlevel3id005007001">5.7.1 Weitere Operatoren für primitive Typen</a>
+<ul>
+<li><a href="k100037.html#sectlevel4id005007001001">Fragezeichenoperator</a>
+<li><a href="k100037.html#sectlevel4id005007001002">Type-Cast-Operator</a>
+</ul>
+<li><a href="k100037.html#objektoperatoren">5.7.2 Operatoren für Objekte</a>
+<ul>
+<li><a href="k100037.html#sectlevel4id005007002001">String-Verkettung</a>
+<li><a href="k100037.html#sectlevel4id005007002002">Referenzgleichheit und -ungleichheit</a>
+<li><a href="k100037.html#sectlevel4id005007002003">Der instanceof-Operator</a>
+<li><a href="k100037.html#sectlevel4id005007002004">Der new-Operator</a>
+<li><a href="k100037.html#sectlevel4id005007002005">Member-Zugriff</a>
+<li><a href="k100037.html#sectlevel4id005007002006">Methodenaufruf</a>
+<li><a href="k100037.html#sectlevel4id005007002007">Zugriff auf Array-Elemente</a>
+</ul>
+<li><a href="k100037.html#sectlevel3id005007003">5.7.3 Welche Operatoren es nicht gibt</a>
+</ul>
+</ul>
+<hr>
+
+<p>
+Neben den bisher vorgestellten Operatoren stellt Java noch eine Reihe
+weiterer Operatoren zur Verfügung, die in diesem Abschnitt erläutert
+werden sollen.
+
+<!-- Section -->
+
+<a name="sectlevel3id005007001"></a>
+<h3>5.7.1 Weitere Operatoren für primitive Typen </h3>
+
+
+<!-- Section -->
+<a name="sectlevel4id005007001001"></a>
+<h4><a name="ixa100364">Fragezeichenoperator</a></h4>
+
+<p>
+Der Fragezeichenoperator <font color="#000077"><tt>?:</tt></font>
+ist der einzige dreiwertige Operator in Java. Er erwartet einen logischen
+Ausdruck und zwei weitere Ausdrücke, die beide entweder numerisch,
+von einem Referenztyp oder vom Typ <a href="index_b.html#ixb100072"><font color=#000080><tt>boolean</tt></font></a>
+sind.
+
+<p>
+Bei der Auswertung wird zunächst der Wert des logischen Operators
+ermittelt. Ist dieser wahr, so wird der erste der beiden anderen Operanden
+ausgewertet, sonst der zweite. Das Ergebnis des Ausdrucks <font color="#000077"><tt>a
+? b : c</tt></font> ist also <font color="#000077"><tt>b</tt></font>,
+falls <font color="#000077"><tt>a</tt></font> wahr ist, und <font color="#000077"><tt>c</tt></font>,
+falls <font color="#000077"><tt>a</tt></font> falsch ist. Der Typ
+des Rückgabewerts entspricht dem Typ des größeren
+der beiden Ausdrücke <font color="#000077"><tt>b</tt></font>
+und <font color="#000077"><tt>c</tt></font>.
+
+<!-- Section -->
+
+<a name="sectlevel4id005007001002"></a>
+<h4><a name="ixa100365">Type-Cast-Operator</a></h4>
+
+<p>
+Ebenso wie in C gibt es auch in Java einen Type-Cast-Operator, mit
+dessen Hilfe explizite Typumwandlungen vorgenommen werden können.
+Der Ausdruck <font color="#000077"><tt>(type) a</tt></font> wandelt
+den Ausdruck <font color="#000077"><tt>a</tt></font> in einen Ausdruck
+vom Typ <font color="#000077"><tt>type</tt></font> um. Auch wenn <font color="#000077"><tt>a</tt></font>
+eine Variable ist, ist das Ergebnis von <font color="#000077"><tt>(type)
+a</tt></font> ein Ausdruck, der nicht mehr auf der linken, sondern
+nur noch auf der rechten Seite eines Zuweisungsoperators stehen darf.
+
+<p>
+Wie in <a href="k100022.html#kapiteldatentypen">Kapitel 4</a> erklärt,
+gibt es verschiedene Arten von Typkonvertierungen in Java. Mit Hilfe
+des Type-Cast-Operators dürfen alle legalen Typkonvertierungen
+vorgenommen werden. Der Type-Cast-Operator wird vor allem dann angewendet,
+wenn der Compiler keine impliziten Konvertierungen vornimmt; beispielsweise
+bei der Zuweisung von größeren an kleinere numerische Typen
+oder bei der Umwandlung von Objekttypen.
+
+<!-- Section -->
+
+<a name="objektoperatoren"></a>
+<h3>5.7.2 Operatoren für Objekte<a name="ixa100366"></a> </h3>
+<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>
+Es gibt in Java einige Ausdrücke und Operatoren, die mit Objekten
+arbeiten oder Objekte produzieren. Die meisten von ihnen können
+erst dann erläutert werden, wenn die entsprechenden Konzepte
+in späteren Kapiteln eingeführt wurden. Der Vollständigkeit
+halber sollen sie dennoch an dieser Stelle erwähnt werden.</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="sectlevel4id005007002001"></a>
+<h4><a name="ixa100367">String-Verkettung</a><a name="ixa100368"></a></h4>
+
+<p>
+Der <font color="#000077"><tt>+</tt></font>-Operator kann nicht nur
+mit numerischen Operanden verwendet werden, sondern auch zur Verkettung
+von Strings. Ist wenigstens einer der beiden Operatoren in <font color="#000077"><tt>a
++ b</tt></font> ein String, so wird der gesamte Ausdruck als String-Verkettung
+ausgeführt. Hierzu wird gegebenenfalls zunächst der Nicht-String-Operand
+in einen String umgewandelt und anschließend mit dem anderen
+Operanden verkettet. Das Ergebnis der Operation ist wieder ein String,
+in dem beide Operanden hintereinander stehen.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+In Java ist die Konvertierung in einen String für nahezu jeden
+Typen definiert. Bei primitiven Typen wird die Umwandlung vom Compiler
+und bei Referenztypen durch die Methode <a name="ixa100369"><a href="index_t.html#ixb100327"><font color=#000080><tt>toString</tt></font></a></a>
+ausgeführt. Die String-Verkettung ist daher sehr universell zu
+verwenden und ermöglicht (beispielsweise zu Ausgabezwecken) eine
+sehr bequeme Zusammenfassung von Ausdrücken unterschiedlichen
+Typs. Ein typisches Beispiel für die Verwendung der String-Verkettung
+ist die Ausgabe von numerischen Ergebnissen auf dem Bildschirm:</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
+<tr>
+<td><font color="#FFFFFF"> Tipp </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<a name="listingid005003"></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">/* Listing0503.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing0503
+<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> main(String[] args)
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> <font color="#006699">int</font> a = 5;
+<font color="#555555">008 </font> <font color="#006699">double</font> x = 3.14;
+<font color="#555555">009 </font>
+<font color="#555555">010 </font> System.out.println(<font color="#0000FF">"a = "</font> + a);
+<font color="#555555">011 </font> System.out.println(<font color="#0000FF">"x = "</font> + x);
+<font color="#555555">012 </font> }
+<font color="#555555">013 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing0503.java"><font color="#000055" size=-1>Listing0503.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 5.3: String-Verkettung</i></p>
+
+<p>
+Die Ausgabe des Programms lautet:
+<font color="#333300">
+<pre>
+a = 5
+x = 3.14
+</pre>
+</font>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Etwas Vorsicht ist geboten, wenn sowohl String-Verkettung als auch
+Addition in einem Ausdruck verwendet werden sollen, da die in diesem
+Fall geltenden Vorrang- und Assoziativitätsregeln zu unerwarteten
+Ergebnissen führen können. Das folgende Programm gibt daher
+nicht <font color="#000077"><tt>3 + 4 = 7</tt></font>, sondern <font color="#000077"><tt>3
++ 4 = 34</tt></font> aus.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<a name="listingid005004"></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">/* Listing0504.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing0504
+<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> main(String[] args)
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> <font color="#00AA00">// Die +-Operatoren werden von innen nach außen und von</font>
+<font color="#555555">008 </font> <font color="#00AA00">// links nach rechts ausgewertet </font>
+<font color="#555555">009 </font> System.out.println(<font color="#0000FF">"3 + 4 = "</font> + 3 + 4);
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing0504.java"><font color="#000055" size=-1>Listing0504.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 5.4: Vorsicht bei der String-Verkettung!</i></p>
+
+<p>
+Um das gewünschte Ergebnis zu erzielen, müsste der Teilausdruck
+<font color="#000077"><tt>3 + 4</tt></font> geklammert werden:
+<a name="listingid005005"></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">/* Listing0505.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing0505
+<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> main(String[] args)
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> <font color="#00AA00">// Die +-Operatoren werden von innen nach außen und von</font>
+<font color="#555555">008 </font> <font color="#00AA00">// links nach rechts ausgewertet </font>
+<font color="#555555">009 </font> System.out.println(<font color="#0000FF">"3 + 4 = "</font> + (3 + 4));
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing0505.java"><font color="#000055" size=-1>Listing0505.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 5.5: Korrekte String-Verkettung bei gemischten Ausdrücken</i></p>
+
+
+<!-- Section -->
+<a name="sectlevel4id005007002002"></a>
+<h4><a name="ixa100370">Referenzgleichheit und -ungleichheit</a></h4>
+<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>
+Die Operatoren <font color="#000077"><tt>==</tt></font> und <font color="#000077"><tt>!=</tt></font>
+können auch auf Objekte, also auf Referenztypen, angewendet werden.
+In diesem Fall ist zu beachten, dass dabei lediglich die Gleichheit
+oder Ungleichheit der Referenz getestet wird. Es wird also überprüft,
+ob die Objektzeiger auf ein und dasselbe Objekt zeigen, und nicht,
+ob die Objekte <i>inhaltlich</i> übereinstimmen.</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>
+
+<p>
+Ein einfaches Beispiel ist der Vergleich zweier Strings <font color="#000077"><tt>a</tt></font>
+und <font color="#000077"><tt>b</tt></font>, die beide den Inhalt
+»hallo« haben:
+<a name="listingid005006"></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">/* Listing0506.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing0506
+<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> main(String[] args)
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> String a = <font color="#0000AA">new</font> String(<font color="#0000FF">"hallo"</font>);
+<font color="#555555">008 </font> String b = <font color="#0000AA">new</font> String(<font color="#0000FF">"hallo"</font>);
+<font color="#555555">009 </font> System.out.println(<font color="#0000FF">"a == b liefert "</font> + (a == b));
+<font color="#555555">010 </font> System.out.println(<font color="#0000FF">"a != b liefert "</font> + (a != b));
+<font color="#555555">011 </font> }
+<font color="#555555">012 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing0506.java"><font color="#000055" size=-1>Listing0506.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 5.6: Vergleichen von Referenzen</i></p>
+
+<p>
+Werden sie zur Laufzeit angelegt (wie in diesem Beispiel), liefert
+das Programm das erwartete Ergebnis, denn <font color="#000077"><tt>a</tt></font>
+und <font color="#000077"><tt>b</tt></font> sind Referenzen auf unterschiedliche
+Objekte, also Zeiger auf unterschiedliche Instanzen derselben Klasse.
+<font color="#333300">
+<pre>
+a == b liefert false
+a != b liefert true
+</pre>
+</font>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Dies ist das erwartete Verhalten für fast alle Objektreferenzen.
+Werden die Strings als Literale dagegen zur Compile-Zeit angelegt
+und damit vom Compiler als <i>konstant</i> erkannt, sind sie genau
+dann Instanzen derselben Klasse, wenn sie tatsächlich inhaltlich
+gleich sind. Dies liegt daran, dass String-Literale mit Hilfe der
+Methode <a name="ixa100371"><a href="index_s.html#ixb100329"><font color=#000080><tt>String.intern</tt></font></a></a>
+angelegt werden, die einen Puffer von <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>-Objekten
+verwaltet, in dem jede Zeichenkette nur einmal vorkommt. Wird ein
+bereits existierender String noch einmal angelegt, so findet die Methode
+den Doppelgänger und liefert einen Zeiger darauf zurück.
+Dieses Verhalten ist so nur bei Strings zu finden, andere Objekte
+besitzen keine konstanten Werte und keine literalen Darstellungen.
+Die korrekte Methode, Strings auf inhaltliche Übereinstimmung
+zu testen, besteht darin, die Methode <a name="ixa100372"><a href="index_e.html#ixb100223"><font color=#000080><tt>equals</tt></font></a></a>
+der Klasse <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
+aufzurufen (siehe <a href="k100037.html#stringequals">Listing 5.7</a>).</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<a name="stringequals"></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">/* Listing0507.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing0507
+<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> main(String[] args)
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> String a = <font color="#0000AA">new</font> String(<font color="#0000FF">"hallo"</font>);
+<font color="#555555">008 </font> String b = <font color="#0000AA">new</font> String(<font color="#0000FF">"hallo"</font>);
+<font color="#555555">009 </font> System.out.println(<font color="#0000FF">"a.equals(b) liefert "</font> + a.equals(b));
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing0507.java"><font color="#000055" size=-1>Listing0507.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 5.7: Vergleichen von Strings mit equals</i></p>
+
+
+<!-- Section -->
+<a name="sectlevel4id005007002003"></a>
+<h4>Der instanceof-Operator </h4>
+
+<p>
+Der <a name="ixa100373"><a href="index_i.html#ixb100330"><font color=#000080><tt>instanceof</tt></font></a></a>-Operator
+kann verwendet werden, um herauszufinden, zu welcher Klasse ein bestimmtes
+Objekt gehört. Der Ausdruck <font color="#000077"><tt>a instanceof
+b</tt></font> liefert genau dann <a href="index_t.html#ixb100233"><font color=#000080><tt>true</tt></font></a>,
+wenn <font color="#000077"><tt>a</tt></font> und <font color="#000077"><tt>b</tt></font>
+Referenztypen sind und <font color="#000077"><tt>a</tt></font> eine
+Instanz der Klasse <font color="#000077"><tt>b</tt></font> oder einer
+ihrer Unterklassen ist. Falls das Ergebnis des <a href="index_i.html#ixb100330"><font color=#000080><tt>instanceof</tt></font></a>-Operators
+nicht bereits zur Compile-Zeit ermittelt werden kann, generiert der
+Java-Compiler Code, um den entsprechenden Check zur Laufzeit durchführen
+zu können.
+
+<!-- Section -->
+
+<a name="sectlevel4id005007002004"></a>
+<h4>Der new-Operator </h4>
+
+<p>
+In Java werden Objekte und Arrays mit Hilfe des <a name="ixa100374"><a href="index_n.html#ixb100089"><font color=#000080><tt>new</tt></font></a></a>-Operators
+erzeugt. Sowohl das Erzeugen eines Arrays als auch das Erzeugen eines
+Objekts sind Ausdrücke, deren Rückgabewert das gerade erzeugte
+Objekt bzw. Array ist.
+
+<!-- Section -->
+
+<a name="sectlevel4id005007002005"></a>
+<h4><a name="ixa100375">Member-Zugriff</a></h4>
+
+<p>
+Der Zugriff auf Klassen- oder Instanzvariablen wird mit Hilfe des
+<i>Punkt</i>-Operators ausgeführt und hat die Form <font color="#000077"><tt>a.b</tt></font>.
+Dabei ist <font color="#000077"><tt>a</tt></font> der Name einer Klasse
+bzw. der Instanz einer Klasse, und <font color="#000077"><tt>b</tt></font>
+ist der Name einer Klassen- oder Instanzvariable. Der Typ des Ausdrucks
+entspricht dem Typ der Variable, und zurückgegeben wird der Inhalt
+dieser Variable.
+
+<!-- Section -->
+
+<a name="sectlevel4id005007002006"></a>
+<h4>Methodenaufruf<a name="ixa100376"></a> </h4>
+
+<p>
+In Java gibt es keine Funktionen, sondern nur <i>Methoden</i>. Der
+Unterschied zwischen beiden besteht darin, dass Methoden immer an
+eine Klasse oder die Instanz einer Klasse gebunden sind und nur in
+diesem Kontext aufgerufen werden können. Die Syntax des Methodenaufrufs
+gleicht der anderer Programmiersprachen und erfolgt in der (etwas
+vereinfachten) Form <font color="#000077"><tt>f()</tt></font> bzw.
+<font color="#000077"><tt>f(parameterliste)</tt></font>. Der Typ des
+Ausdrucks entspricht dem vereinbarten Rückgabetyp der Methode.
+Der Wert des Ausdrucks ist der von der Methode mit Hilfe der <a name="ixa100377"><a href="index_r.html#ixb100333"><font color=#000080><tt>return</tt></font></a></a>-Anweisung
+zurückgegebene Wert.
+
+<p>
+Methoden können selbstverständlich Nebeneffekte haben und
+werden in vielen Fällen ausschließlich zu diesem Zweck
+geschrieben. Ist dies der Fall, so sollte eine Methode als <a name="ixa100378"><a href="index_v.html#ixb100334"><font color=#000080><tt>void</tt></font></a></a>
+deklariert werden und damit anzeigen, dass sie keinen Rückgabewert
+produziert. Die einzig sinnvolle Verwendung einer solchen Methode
+besteht darin, sie innerhalb einer <i>Ausdrucksanweisung</i> (siehe
+<a href="k100040.html#kapitelanweisungen">Kapitel 6</a>) aufzurufen.
+<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>
+Da die Realisierung der Methodenaufrufe in Java recht kompliziert
+ist (die Sprachspezifikation widmet diesem Thema mehr als 10 Seiten),
+werden wir in <a href="k100046.html#kapiteloop1">Kapitel 7</a> noch
+einmal ausführlich darauf eingehen.</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="sectlevel4id005007002007"></a>
+<h4>Zugriff auf Array-Elemente </h4>
+
+<p>
+Wie in anderen Programmiersprachen erfolgt auch in Java der Zugriff
+auf Array-Elemente mit Hilfe eckiger Klammern in der Form <font color="#000077"><tt>a[b]</tt></font>
+(bzw. <font color="#000077"><tt>a[b][c]</tt></font>, <font color="#000077"><tt>a[b][c][d]</tt></font>
+usw. bei mehrdimensionalen Arrays). Dabei ist <font color="#000077"><tt>a</tt></font>
+der Name eines Arrays oder ein Ausdruck, der zu einem Array ausgewertet
+wird, und <font color="#000077"><tt>b</tt></font> ein Ausdruck, der
+zu einem <a href="index_i.html#ixb100244"><font color=#000080><tt>int</tt></font></a>
+evaluiert werden kann. Der Typ des Ausdrucks entspricht dem Basistyp
+des Arrays, zurückgegeben wird der Inhalt des Array-Elements,
+das sich an Position <font color="#000077"><tt>b</tt></font> befindet.
+Wie in C und C++ beginnt die Zählung mit dem ersten Element bei
+Position 0.
+
+<!-- Section -->
+
+<a name="sectlevel3id005007003"></a>
+<h3>5.7.3 Welche Operatoren es nicht gibt </h3>
+<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>
+Da es in Java keine expliziten Pointer gibt, fehlen auch die aus C
+bekannten Operatoren <font color="#000077"><tt>*</tt></font> zur Dereferenzierung
+eines Zeigers und <font color="#000077"><tt>&</tt></font> zur
+Bestimmung der Adresse einer Variablen. Des weiteren fehlt ein <font color="#000077"><tt>sizeof</tt></font>-Operator,
+denn da alle Typen eine genau spezifizierte Länge haben, ist
+dieser überflüssig. Der Kommaoperator von C ist ebenfalls
+nicht vorhanden, er taucht aber als syntaktischer Bestandteil der
+<a href="index_f.html#ixb100078"><font color=#000080><tt>for</tt></font></a>-Schleife
+wieder auf und erlaubt es, im Initialisierungsteil der Schleife mehr
+als eine Zuweisung vorzunehmen.</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="k100030.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100036.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100038.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100040.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>
|
