1. Integer
Klasse
Integer
ist auch insofern gut, als es eine Klasse ist, was bedeutet, dass es Felder und Methoden haben kann. Und natürlich hat es sie. Viele von ihnen – Dutzende von ihnen. Hier betrachten wir die grundlegendsten.
Die Integer
Klasse verfügt über zwei Felder, die die maximal und minimal möglichen Werte des int
Typs enthalten:
Feld | Beschreibung |
---|---|
|
Maximal möglicher Wert des int Typs |
|
Kleinstmöglicher Wert des int Typs |
int
Manchmal möchte man einer Variablen den kleinst- oder größtmöglichen Wert zuweisen . Um Ihren Code nicht mit unverständlichen Konstanten zu überladen, können Sie dies ganz klar wie folgt schreiben:
Code | Beschreibung |
---|---|
|
|
Die Integer
Klasse verfügt auch über einige interessante Methoden. Hier sind sie:
Methoden | Beschreibung |
---|---|
|
Gibt eine Zeichenfolge zurück, die die hexadezimale Darstellung der Zahl ist |
|
Gibt eine Zeichenfolge zurück, die die binäre Darstellung der Zahl ist |
|
Gibt eine Zeichenfolge zurück, die die oktale Darstellung der Zahl ist |
|
Wickelt das Übergebene int in ein Integer Objekt ein |
|
Gibt die aus der übergebenen Zeichenfolge erhaltene Zahl zurück |
Sie sind bereits auf die statische Integer.parseInt()
Methode gestoßen. Erinnern wir uns, wie es funktioniert:
int name = Integer.parseInt(string);
Wenn eine Zeichenfolge, die eine Zahl (nur Ziffern) enthält, an die parseInt()
Methode übergeben wird, analysiert sie die Zeichenfolge und gibt die darin enthaltene Zahl zurück.
Auch die restlichen Methoden sind nützlich. Einige von ihnen können beispielsweise eine übergebene Zahl in eine Zeichenfolge umwandeln, die die binäre, oktale oder hexadezimale Darstellung der Zahl enthält.
2. Double
Klasse
Im Allgemeinen Double
ähnelt die Klasse der Integer
Klasse, nur dass sie eine double
statt einer umschließt int
. Es gibt auch Bereiche und Methoden, die für uns von Interesse sein werden. Betrachten Sie einige davon:
Die Double
Klasse hat sechs interessante Bereiche:
Feld | Beschreibung |
---|---|
|
Negative Unendlichkeit |
|
Positive Unendlichkeit |
|
Kleinstmöglicher Exponent (2 x ) |
|
Maximal möglicher Exponent (2 x ) |
|
Kleinstmöglicher Wert des double Typs |
|
Maximal möglicher Wert des double Typs |
Unendlichkeit
Wenn man -1.0
durch dividiert 0.0
, erhält man eine negative Unendlichkeit. Wenn man 1.0
durch dividiert 0.0
, erhält man eine positive Unendlichkeit. Sie können a nicht nur durch Null dividieren double
, sondern auch das Ergebnis dieser Operationen speichern.
Exponent von adouble
Den Exponenten zu verstehen ist einfach. Intern besteht ein Double aus einer Mantisse und einem Exponenten. Aber hier ist der Wert des Exponenten nicht , sondern . Wenn also der Exponent um erhöht wird , verdoppelt sich der Gesamtwert der Zahl.10x
2x
1
MIN_EXPONENT == -1024
, was bedeutet , was ungefähr gleich ist2-1024
10-308
Und natürlich Double
verfügt die Klasse über interessante Methoden:
Methoden | Beschreibung |
---|---|
|
Gibt eine Zeichenfolge zurück, die die hexadezimale Darstellung der Zahl ist |
|
Prüft, ob die übergebene Zahl unendlich ist. |
|
Überprüft, ob die übergebene Nummer vorhanden istNaN |
|
Wickelt das Übergebene double in ein Double Objekt ein |
|
Gibt die aus der übergebenen Zeichenfolge erhaltene Zahl zurück |
Interessanterweise gibt es eine isInfinite()
Methode, die zurückgibt true
, wenn die übergebene Zahl positiv oder negativ unendlich ist.
Die isNaN()
Methode ist ähnlich – sie prüft, ob die übergebene Zahl NaN
( Not-a-Number , eine spezielle Konstante, die einen undefinierten Wert angibt) ist.
3. Character
Klasse
Die Character
Klasse ist vor allem wegen ihrer großen Anzahl statischer Utility-Methoden interessant, mit denen Sie überprüfen können, ob Zeichen zu verschiedenen Kategorien gehören.
Beispiele
Methoden | Beschreibung |
---|---|
|
Überprüft, ob ein Zeichen ein alphabetisches Zeichen ist |
|
Überprüft, ob das Zeichen ein Buchstabe ist |
|
Prüft, ob das Zeichen eine Ziffer ist |
|
Prüft, ob das Zeichen ein Leerzeichen, ein Zeilenumbruch oder ein Seitenumbruch ist (Codes: 12, 13, 14) |
|
Überprüft, ob das Zeichen ein Leerzeichen ist: ein Leerzeichen, ein Tabulator usw. |
|
Prüft, ob das Zeichen ein Kleinbuchstabe ist |
|
Überprüft, ob das Zeichen ein Großbuchstabe ist |
|
Wandelt das Zeichen in Kleinbuchstaben um |
|
Wandelt das Zeichen in Großbuchstaben um |
Ein Merkmal dieser Methoden ist, dass sie mit allen bekannten Alphabeten funktionieren: Arabische Ziffern werden als Ziffern usw. klassifiziert.
4. Boolean
Klasse
Der Boolean
Typ ist praktisch derselbe wie der boolean
Typ. Die Unterschiede sind minimal.
Nachfolgend zeigen wir eine vereinfachte Version der Boolean
Klasse:
Code | Beschreibung |
---|---|
|
Konstanten: TRUE è FALSE Variablenklassenkonstruktor Die Methode gibt den Wert der internen Variablen zurück. Boolean Diese statische Methode konvertiert in und in . true TRUE false FALSE |
Der Boolean
Typ hat zwei Konstanten (zwei Felder):
Konstanten der Klasse | Gegenstück zum booleschen Typ | Beschreibung |
---|---|---|
|
|
WAHR |
|
|
FALSCH |
Sie können mit ihnen auf die gleiche Weise arbeiten wie mit dem boolean
Typ:
Code | Notiz |
---|---|
|
Die Boolean Klasse ist die einzige Klasse, die innerhalb einer Bedingung geschrieben werden kann |
|
Alle drei Variablen sind gleich true /TRUE |
|
Konstanten können mit beiden verglichen werden. equals Dies == funktioniert auch. |
Autoboxing funktioniert hier hervorragend. Das bedeutet, dass Sie diesen Typ auf die gleiche Weise wie den boolean
Typ verwenden können – es gibt keine Fallstricke, auf die Sie achten müssen.
Wie es geschrieben steht | Wie es funktioniert |
---|---|
|
|
Und hier ein Vergleich der boolean
und- Boolean
Typen:
boolean a = true;
Boolean b = true; // b will be equal to Boolean.TRUE
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // true (compared by reference, but they point to the same object)
Wenn Sie wirklich ein unabhängiges Boolean
Objekt benötigen, müssen Sie es explizit erstellen:
boolean a = true;
Boolean b = new Boolean(true); // New Boolean object
Boolean c = true; // c will be equal to Boolean.TRUE
a == b; // true (compared by value)
a == c; // true (compared by value)
b == c; // false (compared by reference, and they point to different objects)
Noch ein Beispiel, bei dem wir ein Boolean
Inneres eines verwenden if
:
Code | Notiz |
---|---|
|
Dies wird kompiliert und funktioniert |
Das wird kompiliert, aber es wird nicht funktionieren!
Code | Notiz |
---|---|
|
Fehler . Diese Zeile löst eine Ausnahme aus |
5. Zwischenspeichern von Werten während des Autoboxings
Es gibt einige Fallstricke im Zusammenhang mit Integer-Wrapper-Typen.
Wie Sie bereits wissen, wird beim Vergleich von an int
und an Integer
das Integer
in ein umgewandelt int
:
Wie es geschrieben steht | Wie es funktioniert |
---|---|
|
|
Wenn Sie zwei Integer
Objekte miteinander vergleichen, werden sie nicht in int
s umgewandelt:
Code | Konsolenausgabe |
---|---|
|
|
a == c
und , aber , denn wenn wir vergleichen , vergleichen wir Referenzen. Das ist im Wesentlichen das, was wir erwarten würden.b == c
a != b
a
b
Überraschung
Wenn wir jedoch 500
durch ersetzen 100
, erhalten wir ein völlig anderes Ergebnis:
Code | Konsolenausgabe |
---|---|
|
|
Das Problem hierbei ist, dass beim Autoboxing nicht immer tatsächlich ein neues Integer
Objekt erstellt wird . Objekte werden für Werte -128
durch 127
Inclusive zwischengespeichert.
Die Integer
Klasse verfügt über ein verstecktes Array, das Objekte speichert: Integer(-128)
, Integer(-127)
, ... Integer(126)
,Integer(127)
Wenn Sie schreiben Integer x = 128
, erstellt der Autoboxing-Prozess ein neues Objekt. Wenn Sie jedoch schreiben Integer x = 127
, ruft der Autoboxing-Prozess das vorhandene Objekt aus dem Cache (aus dem Array) ab.
Wenn Sie nicht möchten, dass das Integer
Objekt aus dem Cache kommt, müssen Sie es explizit erstellen, indem Sie Folgendes schreiben:Integer x = new Integer(127);
Alle Wrapper-Typen verfügen über einen solchen Cache: Integer
, Long
, Byte
, Short
, Boolean
. Für den Boolean
Typ sind sowohl seine TRUE
als auch FALSE
seine Werte Konstanten, sodass sie im Wesentlichen auch zwischengespeichert werden.
GO TO FULL VERSION