Hüllklassen in Java (Hüllklassen in Java), Lektion, Seite 722246
https://www.purl.org/stefan_ram/pub/huellklassen_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Hüllklassen in Java 

Diese Lektion wird derzeit gerade überarbeitet (Stand 2018). Sie kann daher derzeit noch unpassende Inhalte enthalten.

Hüllobjekte und Hüllklassen

Ein Hüllobjekt  ist ein Objekt, dessen hauptsächliche Bedeutung darin gesehen wird, einen bestimmten Inhalt (einen Wert eines elementaren Typs oder ein Objekt) zu enthalten und zu repräsentieren. Das Hüllobjekt kann in bestimmten Fällen direkt oder nach einer entsprechenden Umwandlung für den enthaltenen Inhalt stehen.

Die Bezeichnung „Hüllobjekt“ wurde gewählt, weil Hüllobjekte ihren Inhalt „einhüllen“. Man sagt auch, daß ein Hüllobjekt den von ihm dargestellten Inhalt verpacke.

Ein Hüllobjekt
.-----------------------------.
| Objekt |
| .-------------------------. |
| | Inhalt | |
| '-------------------------' |
'-----------------------------'

Eine Klasse, deren Objekte Hüllobjekte sind, nennt man auch eine Hüllklasse.

Man verwendet solche Hüllobjekte beispielsweise, wenn man Werte elementarer Typen als Objekt repräsentieren muß, etwa weil eine Zahl an einer Stelle verwendet werden soll, an der nur Objekte erlaubt sind.

Spezielle Hüllklassen für elementare Werte sind in Java  allerdings nur deshalb nötig, weil die Sprache nicht rein objektorientiert ist, sondern neben den Objekten auch noch Werte elementarer Typen  enthält.

Dadurch wird die Sprache leider verkompliziert, weil zur Darstellung eines Wertes nun zwei verschiedenen Typen in Frage kommen: Es muß jeweils gewählt werden, ob ein elementarer Typ oder ein entsprechender Hülltyp verwendet wird, es sind gelegentlich Umwandlungen zwischen beiden Arten der Darstellung nötig und auch das Lernen wird aufwendiger, da unterschiedliche Regeln für beide Arten der Darstellung erlernt werden müssen.

Wertsemantik und Referenzsemantik

Ein Unterschied zwischen Werten elementarer Typen und Exemplaren ihrer Klassen ist Semantik der Identität (Lehre von der Bedeutung der Identität).

Zwei gleiche Werte sind natürlich gleich. Allerdings können zwei verschiedene Exemplare  einer Hüllklasse den gleichen Wert  darstellen, anders gesagt: zu gleichen Werten können unterschiedliche Exemplare gehören. Um die Werte  zu vergleichen muß dann die Operation »equals( Object )« verwendet werden, da der Operator »==« die Referenzen vergleicht.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Integer p = new java.lang.Integer( 0 );
final java.lang.Integer q = new java.lang.Integer( 0 );
java.lang.System.out.println( 0 == 0 );
java.lang.System.out.println( p == q );
java.lang.System.out.println( p.equals( q )); }}
transcript
true
false
true

Die technisch einfachere und eindeutig definierte Relation ist die durch den Operator »==« getestet Gleichheit. Diese stimmte jedoch nicht immer mit dem überein, was man sich unter „Gleichheit“ vorstellt.

Daher wird das Gleichwertigkeitsprädikat »equals« für einen Typ so definiert, daß es vergleicht, ob zwei Objekte den gleichen Wert  enthalten. Wann zwei Objekte als gleichwertig angesehen werden, ist ein Frage der Übereinkunft (Konvention, Gewohnheit). Technisch kann das Prädikat »equals« eigentlich willkürlich definiert werden.

Daß zwei Referenzausdrücke den gleichen Wert (die gleiche Referenz, das gleiche Objekt ) haben, wird mit dem Prädikat »==« notiert. Daß zwei Objekte „den gleichen Wert enthalten “ oder „gleichwertig sind“ wird mit dem Prädikat "equals" notiert. Zwei verschiedene  Objekte können einander gleichwertig  sein.

Zwei verschiedene Objekte kann man mit zwei Flaschen Wein vergleichen. Zwei verschiedene Flaschen können den gleichen Wein  enthalten und das gleiche Etikett haben. Wenn man eine davon kaufen will, ist die andere genauso akzeptabel, da man sie ohnehin nicht unterscheiden kann. Sie sind dann gleichwertig, aber nicht gleich, da es ja immer noch zwei verschiedene Flaschen sind.

Ermittlung des Namens des eingehüllten Typs

Auch für den Typ »double«, den Typ »boolean« und den Typ »char« gibt es jeweils eine Hüllklasse, nämlich die Klasse »java.lang.Double«, »java.lang.Boolean« beziehungsweise »java.lang.Character«.

Wenn ein Zeichenfolgenobjekt mit dem Text »Hallo!« benötigt wird, kann das Literal »"Hallo!"« verwendet werden, ohne daß ein Exemplarerzeugungsausdruck benötigt wird.

    java.lang.System.out.println( Integer.TYPE.getName() );

»int.class« hat den gleichen Wert wie »Integer.TYPE«, es ist eine Repräsentation des elementaren Typs »int« durch ein Objekt.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722246 stefan_ram:722246 Hüllklassen in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722246, slrprddef722246, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/huellklassen_java