1. IntegerKlasse

Integerist 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 IntegerKlasse verfügt über zwei Felder, die die maximal und minimal möglichen Werte des intTyps enthalten:

Feld Beschreibung
Integer.MAX_VALUE
Maximal möglicher Wert des intTyps
Integer.MIN_VALUE
Kleinstmöglicher Wert des intTyps

intManchmal 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
int min = Integer.MIN_VALUE;
min == 0x80000000

Die IntegerKlasse verfügt auch über einige interessante Methoden. Hier sind sie:

Methoden Beschreibung
String Integer.toHexString(int)
Gibt eine Zeichenfolge zurück, die die hexadezimale Darstellung der Zahl ist
String Integer.toBinaryString(int)
Gibt eine Zeichenfolge zurück, die die binäre Darstellung der Zahl ist
String Integer.toOctalString(int)
Gibt eine Zeichenfolge zurück, die die oktale Darstellung der Zahl ist
Integer Integer.valueOf(int i)
Wickelt das Übergebene intin ein IntegerObjekt ein
Integer Integer.parseInt(String)
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. DoubleKlasse

Im Allgemeinen Doubleähnelt die Klasse der IntegerKlasse, nur dass sie eine doublestatt einer umschließt int. Es gibt auch Bereiche und Methoden, die für uns von Interesse sein werden. Betrachten Sie einige davon:

Die DoubleKlasse hat sechs interessante Bereiche:

Feld Beschreibung
double Double.NEGATIVE_INFINITY
Negative Unendlichkeit
double Double.POSITIVE_INFINITY
Positive Unendlichkeit
int Double.MIN_EXPONENT
Kleinstmöglicher Exponent (2 x )
int Double.MAX_EXPONENT
Maximal möglicher Exponent (2 x )
double Double.MIN_VALUE
Kleinstmöglicher Wert des doubleTyps
double Double.MAX_VALUE
Maximal möglicher Wert des doubleTyps

Unendlichkeit

Wenn man -1.0durch dividiert 0.0, erhält man eine negative Unendlichkeit. Wenn man 1.0durch 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.10x2x1

MIN_EXPONENT == -1024, was bedeutet , was ungefähr gleich ist2-102410-308

Und natürlich Doubleverfügt die Klasse über interessante Methoden:

Methoden Beschreibung
String Double.toHexString(double)
Gibt eine Zeichenfolge zurück, die die hexadezimale Darstellung der Zahl ist
boolean Double.isInfinite(double)
Prüft, ob die übergebene Zahl unendlich ist.
boolean Double.isNaN(double)
Überprüft, ob die übergebene Nummer vorhanden istNaN
Double Double.valueOf(double)
Wickelt das Übergebene doublein ein DoubleObjekt ein
Double Double.parseDouble(String)
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. CharacterKlasse

Die CharacterKlasse 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
Character.isAlphabetic(int)
Überprüft, ob ein Zeichen ein alphabetisches Zeichen ist
Character.isLetter(char)
Überprüft, ob das Zeichen ein Buchstabe ist
Character.isDigit(char)
Prüft, ob das Zeichen eine Ziffer ist
Character.isSpaceChar(char)
Prüft, ob das Zeichen ein Leerzeichen, ein Zeilenumbruch oder ein Seitenumbruch ist (Codes: 12, 13, 14)
Character.isWhitespace(char)
Überprüft, ob das Zeichen ein Leerzeichen ist: ein Leerzeichen, ein Tabulator usw.
Character.isLowerCase(char)
Prüft, ob das Zeichen ein Kleinbuchstabe ist
Character.isUpperCase(char)
Überprüft, ob das Zeichen ein Großbuchstabe ist
Character.toLowerCase(char)
Wandelt das Zeichen in Kleinbuchstaben um
Character.toUpperCase(char)
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. BooleanKlasse

Der BooleanTyp ist praktisch derselbe wie der booleanTyp. Die Unterschiede sind minimal.

Nachfolgend zeigen wir eine vereinfachte Version der BooleanKlasse:

Code Beschreibung
class Boolean
{
   public static final Boolean TRUE = new Boolean(true);
   public static final Boolean FALSE = new Boolean(false);

   private final boolean value;

   public Boolean(boolean value)
   {
      this.value = value;
   }

   public boolean booleanValue()
   {
      return value;
   }

   public static Boolean valueOf(boolean value)
   {
      return (value ? TRUE : FALSE);
   }
}


Konstanten: TRUEè FALSE


Variablenklassenkonstruktor Die Methode gibt den Wert der internen Variablen zurück.

BooleanDiese statische Methode konvertiert in und in .








trueTRUEfalseFALSE

Der BooleanTyp hat zwei Konstanten (zwei Felder):

Konstanten der Klasse Gegenstück zum booleschen Typ Beschreibung
Boolean.TRUE
true
WAHR
Boolean.FALSE
false
FALSCH

Sie können mit ihnen auf die gleiche Weise arbeiten wie mit dem booleanTyp:

Code Notiz
if (Boolean.TRUE)
{
}
Die BooleanKlasse ist die einzige Klasse, die innerhalb einer Bedingung geschrieben werden kann
Boolean a = Boolean.TRUE;
boolean b = Boolean.TRUE;
boolean c = true;
Alle drei Variablen sind gleich true/TRUE
Boolean a = Boolean.TRUE;
Boolean b = Boolean.TRUE;
if (a == b)
Konstanten können mit beiden verglichen werden. equalsDies ==

funktioniert auch.

Autoboxing funktioniert hier hervorragend. Das bedeutet, dass Sie diesen Typ auf die gleiche Weise wie den booleanTyp verwenden können – es gibt keine Fallstricke, auf die Sie achten müssen.

Wie es geschrieben steht Wie es funktioniert
Boolean a = true;
Boolean b = true;
Boolean c = false;
boolean d = a;
Boolean a = Boolean.valueOf(true);
Boolean b = Boolean.valueOf(true);
Boolean c = Boolean.valueOf(false);
boolean d = a.booleanValue();

Und hier ein Vergleich der booleanund- BooleanTypen:

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 BooleanObjekt 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 BooleanInneres eines verwenden if:

Code Notiz
Boolean less = (2 < 3);
if (less)
{
   ...
}
Dies wird kompiliert und funktioniert

Das wird kompiliert, aber es wird nicht funktionieren!

Code Notiz
Boolean less = null;
if (less)
{
   ...
}

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 intund an Integerdas Integerin ein umgewandelt int:

Wie es geschrieben steht Wie es funktioniert
int a = 5;
Integer b = 5;
if (a == b)
{
   ...
}
int a = 5;
Integer b = Integer.valueOf(5);
if (a == b.intValue())
{
   ...
}

Wenn Sie zwei IntegerObjekte miteinander vergleichen, werden sie nicht in ints umgewandelt:

Code Konsolenausgabe
Integer a = 500;
Integer b = 500;
int c = 500;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




false
true
true

a == cund , aber , denn wenn wir vergleichen , vergleichen wir Referenzen. Das ist im Wesentlichen das, was wir erwarten würden.b == ca != bab

Überraschung

Wenn wir jedoch 500durch ersetzen 100, erhalten wir ein völlig anderes Ergebnis:

Code Konsolenausgabe
Integer a = 100;
Integer b = 100;
int c = 100;

System.out.println(a == b); // Compared by reference
System.out.println(a == c);
System.out.println(b == c);




true
true
true

Das Problem hierbei ist, dass beim Autoboxing nicht immer tatsächlich ein neues IntegerObjekt erstellt wird . Objekte werden für Werte -128durch 127Inclusive zwischengespeichert.

Die IntegerKlasse 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 IntegerObjekt 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 BooleanTyp sind sowohl seine TRUEals auch FALSEseine Werte Konstanten, sodass sie im Wesentlichen auch zwischengespeichert werden.