Primitive Typen haben Standardwerte, während Wrapper-Typen zunächst null sind. Verwenden Sie diese beiden Merkmale dann für verschiedene Unternehmen. Gemäß den Spezifikationen von Alibaba müssen alle POJO-Klassen Verpackungstypen verwenden, und es wird empfohlen, Basistypen für lokale Variablen zu verwenden.
Die Java-Sprache bietet acht Grundtypen. Sechs numerische Typen (vier Ganzzahlen, zwei Gleitkommatypen), ein Zeichentyp und ein boolescher Typ.
1. Ganzzahl: einschließlich int, short, byte, long, der Anfangswert ist 0.
2. Gleitkommatyp: Der Anfangswert von Float und Double beträgt 0,0
3. Zeichen: Der Anfangswert von char ist ein Leerzeichen, also „“. Bei der Ausgabe ist der Effekt auf der Konsole nicht sichtbar.
4. Boolean: Der boolesche Anfangswert ist falsch
Grundtyp | Größe | Mindestwert | Maximalwert |
Boolescher Wert | ----- | ----- | ------ |
verkohlen | 16-Bit | Unicode 0 | Unicode 2^16-1 |
Byte | 8 Bit | -128 | +127 |
kurz | 16-Bit | -2^15 | +2^15-1 |
int | 32-Bit | -2^31 | +2^31-1 |
lang | 64-Bit | -2^63 | +2^63-1 |
schweben | 32-Bit | IEEE754 | IEEE754 |
doppelt | 64-Bit | IEEE754 | IEEE754 |
Leere |
Beachten:
Das ^ in der Tabelle stellt die Leistung dar
Java verwendet Unicode, 2 Bytes stellen ein Zeichen dar und 1 Byte entspricht 16 Bits.
Grundtyp der Wrapper-Klasse
Integer, Long, Short, Byte, Character, Double, Float, Boolean, BigInteger und BigDecmail
Unter diesen haben BigInteger und BigDecimal keine entsprechenden Grundtypen und werden hauptsächlich für hochpräzise Operationen verwendet. BigInteger unterstützt Ganzzahlen beliebiger Genauigkeit.
BigDecimal unterstützt Operationen mit beliebiger Genauigkeit und Dezimalpunkt
Grundtypen: int, double, float, long, byte, boolean , char
Verpackungstypen: integer, Double, Float, Long, Byte, Boolean, CharEigenschaften der Grundtypen
1. Basisdatentypen nutzen die Wertübertragung bei der Parameterübergabe.
2. Auf dem Stapel werden Basistypen erstellt (es liegt ein Leckproblem vor).
3. Schöpfung geschieht nicht durch Neues
Merkmale von Pakettypen
1. Über „Neu“ erstellen oder direkt zuweisen.
2. Bei der Übergabe von Parametern verwenden wir „Referenzübergabe“, die Methode zur Adressübergabe.
3. Die Erstellung erfolgt auf dem Heap
4. Der Wert der Datentyp-Wrapper-Klasse ist unveränderlich
Vorteile der Pakettypen:
Um einen Pakettyp zu erstellen, können Sie einige Methoden verwenden, die der Basistyp nicht hat, wie etwa valueOf(), toString() usw. Wenn Sie außerdem einen Verweis auf ein int-Objekt anstelle eines Werts übergeben möchten, können Sie nur eine Wrapper-Klasse verwenden.
Gemeinsamkeiten und Unterschiede zwischen Grundtypen und Pakettypen :
1. In Java ist alles ein Objekt, aber die acht Grundtypen sind keine Objekte.
2. Bei verschiedenen Deklarationsmethoden müssen Basistypen nicht über das Schlüsselwort new erstellt werden, während gekapselte Typen das Schlüsselwort new erfordern.
3. Die Speichermethode und der Speicherort sind unterschiedlich. Der Basistyp speichert direkt den Wert der Variablen, auf den durch Speichern auf dem Stapel effizient zugegriffen werden kann. Der gekapselte Typ muss über eine Referenz auf die Instanz und auf die spezifische Instanz verweisen wird im Heap gespeichert;
4. Der Anfangswert ist unterschiedlich. Der Anfangswert des gekapselten Typs ist null, und der Anfangswert des Basistyps hängt vom jeweiligen Typ ab. Beispielsweise ist der Anfangswert des int-Typs 0 und der boolesche Typ FALSCH;
5. Verschiedene Verwendungsmethoden. Beispielsweise können beim Arbeiten mit Sammlungsklassen nur Verpackungstypen verwendet werden.
6. Wann sollten Sie eine Wrapper-Klasse und wann einen Basistyp verwenden? Dies hängt vom Grundgeschäft ab: Ob in diesem Feld Nullwerte zulässig sind, wenn dies zulässig ist, müssen Sie eine Wrapper-Klasse verwenden. Andernfalls Der Grundtyp reicht aus. Wenn Sie Funktionen wie Generics und Reflection verwenden, müssen Sie eine Wrapper-Klasse verwenden!
Quellcode
Schauen Sie sich Boolean
die Eigenschaften und den Konstruktor an, um zu sehen, wie es umbrochen wird boolean
// final boolean类型的属性,通过构造方法注入值
private final boolean value;
// 构造方法 Boolean a = true 实际上就是调用这个方法
public Boolean(boolean value) {
this.value = value;
}
// 构造方法
public Boolean(String s) {
this(parseBoolean(s));
}
Einfach ausgedrückt müssen die durch Boolean definierten Attribute einen Wert haben. Wenn Boolean
der Objektwert lautet null
, tritt NPE während des Entpackvorgangs auf.
Grundlegende Datentypen und Wrapper-Typen verwenden Standards
Notiz:
Die Zuweisungsmethode der Wrapper-Klasse ist valueof, aber ab Java 5.0 (1.5) kann die JAVA Virtual Machine (Java Virtual Machine) die automatische Konvertierung zwischen Basistypen und ihren entsprechenden Wrapper-Klassen durchführen. Daher verwenden wir ihre Wrapper-Klassen genau wie Basistypen, wenn wir Zuweisungen, Parameterübertragungen und mathematische Operationen durchführen. Dies bedeutet jedoch nicht, dass Sie Methoden, die nur in ihren Wrapper-Klassen verfügbar sind, über Basistypen aufrufen können. Darüber hinaus verwenden die Wrapper-Klassen aller Grundtypen (einschließlich void) die endgültige Änderung, sodass wir sie nicht erben können, um neue Klassen zu erweitern, und auch keine ihrer Methoden überschreiben können.
Schauen Sie sich den Quellcode von valueof an, um den Caching-Mechanismus zu verstehen
public static Integer valueOf(int i) {
assert IntegerCache.high>= 127;
if (i >= IntegerCache.low&& i <= IntegerCache.high)
return IntegerCache.cache[i+ (-IntegerCache.low)];
return new Integer(i);
}
Der Cache-Wertebereich jeder Verpackungsklasse:
boolean: true und false
byte: -128~127
char: 0~127
short: -128~127
int: -128~127
long: -128~127
float und double werden nicht zwischengespeichert
Der Wert innerhalb des Cache-Bereichs entspricht einem geöffneten Raum oder einem neuen Objekt.