Die Klasse java.lang.Integer in Java [] (Die Klasse java.lang.Integer in Java), Lektion, Seite 723303
https://www.purl.org/stefan_ram/pub/integer_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Die Klasse »java.lang.Integer« in Java 

Objekte zur Wertrepräsentation

»java.lang.Integer«-Objekte stellen Zahlen als Objekte dar.

Man verwendet »java.lang.Integer«-Objekte, wenn ein Objekt erwartet wird, aber eine Zahl angegeben werden soll.

Die Klasse »java.lang.Integer« erlaubt es, solche ganze Zahlen, die auch mit dem Typ »int« dargestellt werden können, als Objekte der Klasse »java.lang.Integer« darzustellen, was den Vorteil hat, daß die so dargestellten Zahlen dann an Stellen verwendet werden können, an denen ein Objekt erwartet wird, und zu einer einheitlicheren Behandlung von Werten führen kann.

Man kann »java.lang.Integer« auch mit »java.awt.geom.Point2D.Double« vergleichen: Beides sind Klassen von Objekten, die Zahlen enthalten, allerdings enthält »java.lang.Integer« nur eine Zahl, und diese ist vom Typ »int«, während »java.awt.geom.Point2D.Double« zwei Zahlen enthält, die vom Typ »double« sind. Außerdem sind die Zahlen in einem java.awt.geom.Point2D.Double-Objekt veränderlich – im Gegensatz zu der Zahl in einem java.lang.Integer-Objekt.

Unveränderbarkeit

Wie auch Objekte der Klasse »java.lang.String« sind Objekte der Klasse »java.lang.Integer« unveränderlich. Das heißt: Wenn ein Objekt der Klasse »java.lang.Integer« einmal einen bestimmten Zahlenwert darstellt, dann stellt es diesen für immer dar.

Aussprache von »int«

Wir hatten schon früher empfohlen, den Typ »int« nicht  wie das Wort “integer ” auszusprechen. Dies ist auch deshalb nicht empfehlenswert, da mit der Aussprache “integer ” auch die Klasse »java.lang.Integer« gemeint sein könne.

Die Methode »valueOf«

Die statische Methode »valueOf( int )« der Klasse »java.lang.Integer« ergibt eine Referenz auf ein Objekt der Klasse »java.lang.Integer«, welches den Argumentwert repräsentiert.

Der Ausdruck »java.lang.Integer.valueOf( 4 )« liefert beispielsweise eine Referenz auf ein Objekt der Klasse »java.lang.Integer«, welches den int-Wert 4 repräsentiert. Diese Referenz kann man verwenden, wenn die Zahl 4 angegeben werden soll, aber eine Referenz erwartet wird. Dann wäre das Numerale »4« ja nicht zulässig. Man kann »java.lang.Integer.valueOf( 4 )« als eine Referenzdarstellung  oder Objektdarstellung  des Wertes 4 ansehen, also als eine Darstellung des Wertes 4 durch eine Referenz beziehungsweise durch ein Objekt.

Man kann sich vorstellen, daß ein Objekt der Klasse »java.lang.Integer« einen int-Wert enthält.

Ein Objekt der Klasse »java.lang.Integer« mit dem int-Wert »4«
.-----------------------------.
| java.lang.Integer |
| .-------------------------. |
| | int 4 | |
| '-------------------------' |
'-----------------------------'
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 4 );
java.lang.System.out.println( java.lang.Integer.valueOf( 4 )); }}
transcript
4
4

Das obige Programm liefert mit der Ausgabe schon ein Indiz dafür, daß die beiden unterschiedlichen Ausdrücke beide dieselbe Zahl‑4 repräsentieren.

Die Methode »valueOf« kann keine Methode eines Exemplars  der Klasse sein, weil die Existenz eines Exemplars für sie noch nicht vorausgesetzt werden soll. Daher ist dies eine statische  Klassenmethode (sie setzt lediglich die Existenz der Klasse »java.lang.Integer« voraus).

Der Parameter »object« des folgenden Programms kann eine Referenz auf ein Objekt aufnehmen. Durch Darstellung der Zahl 4 mit Hilfe eines Objektes kann dieser Parameter auch mit einer Darstellung des Wertes 4 als Argumente initialisiert werden.

Main.java
public final class Main
{ public static void println( final java.lang.Object object )
{ java.lang.System.out.println( object ) } public static void main( final java.lang.String[] args )
{ println( java.lang.Integer.valueOf( 4 )); }}
transcript
4

Literalanaloga

Die meisten Klassentypen haben keine Literale, also durch die Sprache festgelegte kurze Schreibweisen ihrer Werte. Die valueOf-Ausdrücke spielen bei Typen ohne Literalen teilweise eine Rolle, die mit der von Literalen bei den elementaren Typen vergleichbar ist. Der Ausdruck »4« steht für den Wert »4« des Typs »int«. Der Ausdruck »java.lang.Integer.valueOf( 4 )« steht für eine Referenz auf eine Darstellung des Wertes »4« mit dem Typ »java.lang.Integer«. Um den „Wert »4« der Klasse »java.lang.Integer« zu schreiben, verwendet man eben den Ausdruck »java.lang.Integer.valueOf( 4 )«, so wie man das Numeral »4« verwendet, um den Wert »4« des elementaren Typs »int« zu schreiben.

Die Methode »equals«

Die Methode »equals« wird bei vielen Objekten verwendet, um eine für diese Objekte gewünschte Form von Gleichheit ausdrücken zu können. Bei Objekten der Klasse »java.lang.Integer« ist dies die Gleichheit der dargestellten Werte. Verschiedene  Objekte können denselben  Wert darstellen (haben).

Das folgende Programm zeigt, daß »a« und »b« in der Methode »main(java.lang.String[])« zwei verschiedene  Objekte sind, die aber denselben  Zahlenwert darstellen.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Object a = java.lang.Integer.valueOf( 2_000_000_001 );
final java.lang.Object b = java.lang.Integer.valueOf( 2_000_000_001 ); java.lang.System.out.println( a == b );
java.lang.System.out.println( b == a );
java.lang.System.out.println( a.equals( b ));
java.lang.System.out.println( b.equals( a )); }}
transcript
false
false
true
true

Der Operator »==« vergleicht die links und rechts von ihm angegebenen Referenzen, während die Methode »java.lang.Integer#equals(java.lang.Object)« beim Aufruf mit einem Objekt der Klasse »java.lang.Integer« als Argument vergleicht, ob der gleiche Wert  repräsentiert wird.

Das folgende Programmbeispiel zeigt, daß es nicht ausgeschlossen ist, daß die Methode »java.lang.Integer.valueOf(int)« auch einmal bei mehreren Aufrufen mit dem gleichen Argumentwert das gleiche  Objekt ergibt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Object a = java.lang.Integer.valueOf( 2 + 1 );
final java.lang.Object b = java.lang.Integer.valueOf( 3 ); java.lang.System.out.println( a == b );
java.lang.System.out.println( b == a );
java.lang.System.out.println( a.equals( b ));
java.lang.System.out.println( b.equals( a )); }}
transcript
true
true
true
true

Erzeugungen aus Zeichenfolgen

Die statische Methode »valueOf(java.lang.String)« der Klasse »java.lang.Integer« ergibt ein neues Exemplar der Klasse »java.lang.Integer«, das den Zahlenwert der Zeichenfolge des Argumentes darstellt, falls diese Zeichenfolge einen Text enthält, der eine Zahl (im Zehnersystem) darstellt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Integer i4 = java.lang.Integer.valueOf( "4" );
java.lang.System.out.println( i4.equals( java.lang.Integer.valueOf( 4 ))); }}
transcript
true

Statische Hilfsmethoden für den elementaren Typ »int«

Die Klasse »java.lang.Integer« enthält neben den Methoden für Objekte auch noch statische Methoden und Felder wie beispielsweise »java.lang.Integer.MAX_VALUE« und »java.lang.Integer.compare(int,int)«, die eigentlich zum elementaren Typ »int« gehören. Da elementaren Typen aber keine Methoden oder Felder enthalten können und jede Methode in Java  in einem Referenztyp enthalten sein muß, hat man solche Methoden und Felder in die Klasse »java.lang.Integer« eingetragen. (Vielleicht wäre es übersichtlicher gewesen, solche Methoden in eine extra Klasse zu packen.)

Übungsfragen

?   Gleichheit von java.lang.Integer-Objekten

Wenn man nur die oben in dieser Lektion gegebenen Informationen hat, was kann man dann über die Ausgabe des folgenden Programms sagen?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Object a = java.lang.Integer.valueOf( 201 );
final java.lang.Object b = java.lang.Integer.valueOf( 201 ); java.lang.System.out.println( a == b ); }}

?   Gleichheit von dargestellten Werten

Wenn man nur die oben in dieser Lektion gegebenen Informationen hat, was kann man dann über die Ausgabe des folgenden Programms sagen?

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.Object a = java.lang.Integer.valueOf( 201 );
final java.lang.Object b = java.lang.Integer.valueOf( 201 ); java.lang.System.out.println( a.equals( b )); }}

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 stefanram723303 stefan_ram:723303 Die Klasse java.lang.Integer in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723303, slrprddef723303, 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/integer_java