Java Language
Primitive Datentypen
Suche…
Einführung
byte
, short
, int
, long
, char
, boolean
, float
und double
speichern die meisten numerischen Rohdaten in Java-Programmen.
Syntax
int aInt = 8; // Der definierende (Nummer) Teil dieser int-Deklaration wird als Literal bezeichnet.
int hexInt = 0x1a; // = 26; Sie können Literale mit Hexadezimalwerten vor 0x definieren .
int binInt = 0b11010; // = 26; Sie können auch binäre Literale definieren. vorangestellt mit 0b .
long goodLong = 10000000000L; // Integer-Literale sind standardmäßig vom Typ int. Durch das Hinzufügen des L am Ende des Literals sagen Sie dem Compiler, dass das Literal lang ist. Andernfalls würde der Compiler einen Fehler "Integer number too large" ausgeben.
double aDouble = 3,14; // Fließkomma-Literale haben standardmäßig den doppelten Typ.
Float aFloat = 3.14F; // Standardmäßig wäre dieses Literal doppelt gewesen (und hat den Fehler "Inkompatible Typen" verursacht), aber durch Hinzufügen eines F sagen wir dem Compiler, dass es sich um einen Float handelt.
Bemerkungen
Java verfügt über 8 primitive Datentypen , nämlich boolean
, byte
, short
, char
, int
, long
, float
und double
. (Alle anderen Typen sind Referenztypen . Dies umfasst alle Array-Typen und integrierte Objekttypen / -klassen, die in der Java-Sprache eine besondere Bedeutung haben; z. B. String
, Class
und Throwable
und ihre Unterklassen.)
Das Ergebnis aller Operationen (Addition, Subtraktion, Multiplikation usw.) eines primitiven Typs ist mindestens ein int
also einen short
zu einem short
hinzufügen, wird ein int
erzeugt, ebenso wie das Hinzufügen eines byte
zu einem byte
oder eines char
zu einem char
. Wenn Sie das Ergebnis davon einem Wert desselben Typs zuordnen möchten, müssen Sie es umwandeln. z.B
byte a = 1;
byte b = 2;
byte c = (byte) (a + b);
Wenn die Operation nicht umgesetzt wird, führt dies zu einem Kompilierungsfehler.
Dies ist auf den folgenden Teil der Java-Sprachspezifikation, §2.11.1, zurückzuführen :
Ein Compiler codiert Lasten von Literalwerten der Typen
byte
undshort
mit Java Virtual Machine-Anweisungen, die diese Werte zur Kompilierzeit oder zur Laufzeit auf Werte des Typsint
. Ladungen von Literalwerten der Typenboolean
undchar
werden mit Anweisungen codiert, die das Literal zur Kompilierzeit oder zur Laufzeit auf einen Wert vom Typint
auf null erweitern. [..]. Daher werden die meisten Operationen mit Werten der tatsächlichen Typenboolean
,byte
,char
undshort
von Anweisungen korrekt ausgeführt, die mit Werten des Rechentypsint
.
Der Grund dafür ist auch in diesem Abschnitt angegeben:
Angesichts der Ein-Byte-Opcode-Größe der Java Virtual Machine wird durch die Codierung von Typen in Opcodes Druck auf das Design des Befehlssatzes ausgeübt. Wenn jede getippte Anweisung alle Laufzeitdatentypen der Java Virtual Machine unterstützt, gibt es mehr Anweisungen, als in einem
byte
dargestellt werden könnten. [...] Mit separaten Anweisungen können Sie bei Bedarf zwischen nicht unterstützten und unterstützten Datentypen konvertieren.
Das int Primitive
Ein primitiver Datentyp wie int
enthält Werte direkt in der verwendeten Variable, während eine mit Integer
deklarierte Variable einen Verweis auf den Wert enthält.
Gemäß Java-API : "Die Integer-Klasse hüllt einen Wert des primitiven Typs int in ein Objekt ein. Ein Objekt vom Typ Integer enthält ein einzelnes Feld, dessen Typ int ist."
Standardmäßig ist int
eine 32-Bit-Ganzzahl mit Vorzeichen. Es kann einen Minimalwert von -2 31 und einen Maximalwert von 2 31 - 1 speichern.
int example = -42;
int myInt = 284;
int anotherInt = 73;
int addedInts = myInt + anotherInt; // 284 + 73 = 357
int subtractedInts = myInt - anotherInt; // 284 - 73 = 211
Wenn Sie eine Nummer außerhalb dieses Bereichs speichern möchten, sollten Sie stattdessen long
verwenden. Das Überschreiten des Wertebereichs von int
führt zu einem Integer-Überlauf, wodurch der Wert, der den Bereich überschreitet, an der gegenüberliegenden Stelle des Bereichs hinzugefügt wird (Positiv wird negativ und umgekehrt). Der Wert ist ((value - MIN_VALUE) % RANGE) + MIN_VALUE
oder ((value + 2147483648) % 4294967296) - 2147483648
int demo = 2147483647; //maximum positive integer
System.out.println(demo); //prints 2147483647
demo = demo + 1; //leads to an integer overflow
System.out.println(demo); // prints -2147483648
Die maximalen und minimalen Werte von int
finden Sie unter:
int high = Integer.MAX_VALUE; // high == 2147483647
int low = Integer.MIN_VALUE; // low == -2147483648
Der Standardwert eines int
ist 0
int defaultInt; // defaultInt == 0
Das kurze Primitiv
Ein short
ist eine vorzeichenbehaftete 16-Bit-Ganzzahl. Es hat einen Mindestwert von -2 15 (-32.768) und einen Maximalwert von 2 15 ‑1 (32.767).
short example = -48;
short myShort = 987;
short anotherShort = 17;
short addedShorts = (short) (myShort + anotherShort); // 1,004
short subtractedShorts = (short) (myShort - anotherShort); // 970
Die maximalen und minimalen Werte von short
finden Sie unter:
short high = Short.MAX_VALUE; // high == 32767
short low = Short.MIN_VALUE; // low == -32768
Der Standardwert eines short
ist 0
short defaultShort; // defaultShort == 0
Das lange Primitiv
Standardmäßig ist long
eine 64-Bit-Ganzzahl mit Vorzeichen (in Java 8 kann sie entweder vorzeichenbehaftet oder vorzeichenlos sein). Signiert, kann es einen Minimalwert von -2 63 und einen Maximalwert von 2 63 - 1 speichern und unsigniert einen Minimalwert von 0 und einen Maximalwert von 2 64 - 1
long example = -42;
long myLong = 284;
long anotherLong = 73;
//an "L" must be appended to the end of the number, because by default,
//numbers are assumed to be the int type. Appending an "L" makes it a long
//as 549755813888 (2 ^ 39) is larger than the maximum value of an int (2^31 - 1),
//"L" must be appended
long bigNumber = 549755813888L;
long addedLongs = myLong + anotherLong; // 284 + 73 = 357
long subtractedLongs = myLong - anotherLong; // 284 - 73 = 211
Die maximalen und minimalen Werte von long
finden Sie unter:
long high = Long.MAX_VALUE; // high == 9223372036854775807L
long low = Long.MIN_VALUE; // low == -9223372036854775808L
Der Standardwert von long
ist 0L
long defaultLong; // defaultLong == 0L
Hinweis: Der Buchstabe "L", der am Ende eines long
Buchstabens angehängt wird, unterscheidet nicht zwischen Groß- und Kleinschreibung, es ist jedoch ratsam, Kapital zu verwenden, da es einfacher ist, sich von Ziffer 1 zu unterscheiden:
2L == 2l; // true
Warnung: Java speichert Integer-Objektinstanzen im Bereich von -128 bis 127. Die Begründung wird hier erläutert: https://blogs.oracle.com/darcy/entry/boxing_and_caches_integer_valueof
Folgende Ergebnisse können gefunden werden:
Long val1 = 127L;
Long val2 = 127L;
System.out.println(val1 == val2); // true
Long val3 = 128L;
Long val4 = 128L;
System.out.println(val3 == val4); // false
Verwenden Sie den folgenden Code (ab Java 1.7), um 2 Object Long-Werte richtig zu vergleichen:
Long val3 = 128L;
Long val4 = 128L;
System.out.println(Objects.equal(val3, val4)); // true
Das Vergleichen eines primitiven long mit einem object long führt nicht zu einem falschen Negativ wie beim Vergleich von 2 Objekten mit == do.
Das boolesche Primitiv
Ein boolean
kann einen von zwei Werten speichern, entweder " true
oder " false
boolean foo = true;
System.out.println("foo = " + foo); // foo = true
boolean bar = false;
System.out.println("bar = " + bar); // bar = false
boolean notFoo = !foo;
System.out.println("notFoo = " + notFoo); // notFoo = false
boolean fooAndBar = foo && bar;
System.out.println("fooAndBar = " + fooAndBar); // fooAndBar = false
boolean fooOrBar = foo || bar;
System.out.println("fooOrBar = " + fooOrBar); // fooOrBar = true
boolean fooXorBar = foo ^ bar;
System.out.println("fooXorBar = " + fooXorBar); // fooXorBar = true
Der Standardwert eines boolean
Werts ist false
boolean defaultBoolean; // defaultBoolean == false
Das Byte-Primitiv
Ein byte
ist eine vorzeichenbehaftete 8-Bit-Ganzzahl. Es kann einen Minimalwert von -2 7 (-128) und einen Maximalwert von 2 7 - 1 (127) speichern.
byte example = -36;
byte myByte = 96;
byte anotherByte = 7;
byte addedBytes = (byte) (myByte + anotherByte); // 103
byte subtractedBytes = (byte) (myBytes - anotherByte); // 89
Die maximalen und minimalen byte
Werte finden Sie unter:
byte high = Byte.MAX_VALUE; // high == 127
byte low = Byte.MIN_VALUE; // low == -128
Der Standardwert eines byte
ist 0
byte defaultByte; // defaultByte == 0
Das Float-Primitiv
Ein float
ist eine 32-Bit-Gleitkommazahl mit einfacher Genauigkeit (32 Bit). Standardmäßig werden Dezimalzahlen als Doppelte interpretiert. Um einen float
zu erstellen, hängen Sie einfach ein f
an das Dezimal-Literal an.
double doubleExample = 0.5; // without 'f' after digits = double
float floatExample = 0.5f; // with 'f' after digits = float
float myFloat = 92.7f; // this is a float...
float positiveFloat = 89.3f; // it can be positive,
float negativeFloat = -89.3f; // or negative
float integerFloat = 43.0f; // it can be a whole number (not an int)
float underZeroFloat = 0.0549f; // it can be a fractional value less than 0
Floats behandeln die fünf gängigen arithmetischen Operationen: Addition, Subtraktion, Multiplikation, Division und Modul.
Hinweis: Die folgenden Informationen können aufgrund von Fließkommafehlern geringfügig abweichen. Einige Ergebnisse wurden aus Gründen der Übersichtlichkeit und Lesbarkeit gerundet (dh das Druckergebnis des Additionsbeispiels war tatsächlich 34.600002).
// addition
float result = 37.2f + -2.6f; // result: 34.6
// subtraction
float result = 45.1f - 10.3f; // result: 34.8
// multiplication
float result = 26.3f * 1.7f; // result: 44.71
// division
float result = 37.1f / 4.8f; // result: 7.729166
// modulus
float result = 37.1f % 4.8f; // result: 3.4999971
Aufgrund der Art und Weise, wie Gleitkommazahlen gespeichert werden (dh in binärer Form), haben viele Zahlen keine exakte Darstellung.
float notExact = 3.1415926f;
System.out.println(notExact); // 3.1415925
Während die Verwendung von float
für die meisten Anwendungen geeignet ist, sollten weder float
noch double
verwendet werden, um exakte Darstellungen von Dezimalzahlen (wie Geldbeträge) oder Zahlen zu speichern, bei denen eine höhere Genauigkeit erforderlich ist. Stattdessen sollte die BigDecimal
Klasse verwendet werden.
Der Standardwert eines float
ist 0.0f.
float defaultFloat; // defaultFloat == 0.0f
Ein float
ist auf einen Fehler von 1: 10 Millionen genau.
Hinweis: Float.POSITIVE_INFINITY
, Float.NEGATIVE_INFINITY
, Float.NaN
sind float
Werte. NaN
steht für Ergebnisse von Operationen, die nicht bestimmt werden können, z. B. das Aufteilen von 2 unendlichen Werten. Außerdem sind 0f
und -0f
unterschiedlich, aber ==
ergibt true:
float f1 = 0f;
float f2 = -0f;
System.out.println(f1 == f2); // true
System.out.println(1f / f1); // Infinity
System.out.println(1f / f2); // -Infinity
System.out.println(Float.POSITIVE_INFINITY / Float.POSITIVE_INFINITY); // NaN
Das Doppelprimitiv
Ein double
ist eine 64-Bit-Gleitkommazahl mit 64-Bit-Genauigkeit.
double example = -7162.37;
double myDouble = 974.21;
double anotherDouble = 658.7;
double addedDoubles = myDouble + anotherDouble; // 315.51
double subtractedDoubles = myDouble - anotherDouble; // 1632.91
double scientificNotationDouble = 1.2e-3; // 0.0012
Aufgrund der Art und Weise, wie Gleitkommazahlen gespeichert werden, haben viele Zahlen keine exakte Darstellung.
double notExact = 1.32 - 0.42; // result should be 0.9
System.out.println(notExact); // 0.9000000000000001
Während die Verwendung von double
für die meisten Anwendungen in Ordnung ist, sollten weder float
noch double
für genaue Zahlen wie z. B. Währung verwendet werden. Stattdessen sollte die BigDecimal
Klasse verwendet werden
Der Standardwert eines double
ist 0.0d
public double defaultDouble; // defaultDouble == 0.0
Hinweis: Double.POSITIVE_INFINITY
, Double.NEGATIVE_INFINITY
, Double.NaN
sind double
Werte. NaN
steht für Ergebnisse von Operationen, die nicht bestimmt werden können, z. B. das Aufteilen von 2 unendlichen Werten. Außerdem sind 0d
und -0d
verschieden, aber ==
ergibt true:
double d1 = 0d;
double d2 = -0d;
System.out.println(d1 == d2); // true
System.out.println(1d / d1); // Infinity
System.out.println(1d / d2); // -Infinity
System.out.println(Double.POSITIVE_INFINITY / Double.POSITIVE_INFINITY); // NaN
Das char primitive
A char
speichern kann ein einziges 16-Bit - Unicode - Zeichen. Ein Zeichenliteral wird in einfache Anführungszeichen gesetzt
char myChar = 'u';
char myChar2 = '5';
char myChar3 = 65; // myChar3 == 'A'
Es hat einen Mindestwert von \u0000
(0 in der Dezimaldarstellung, auch Nullzeichen genannt ) und einen Höchstwert von \uffff
(65.535).
Der Standardwert eines char
wird \u0000
.
char defaultChar; // defaultChar == \u0000
Um einen Char of '
Wert zu definieren '
muss eine Escape-Sequenz (Zeichen mit vorangestelltem Backslash) verwendet werden:
char singleQuote = '\'';
Es gibt auch andere Escape-Sequenzen:
char tab = '\t';
char backspace = '\b';
char newline = '\n';
char carriageReturn = '\r';
char formfeed = '\f';
char singleQuote = '\'';
char doubleQuote = '\"'; // escaping redundant here; '"' would be the same; however still allowed
char backslash = '\\';
char unicodeChar = '\uXXXX' // XXXX represents the Unicode-value of the character you want to display
Sie können ein deklarieren char
eines Unicode - Zeichen.
char heart = '\u2764';
System.out.println(Character.toString(heart)); // Prints a line containing "❤".
Es ist auch möglich, ein char
hinzuzufügen. Um beispielsweise durch jeden Kleinbuchstaben zu iterieren, können Sie Folgendes tun:
for (int i = 0; i <= 26; i++) {
char letter = (char) ('a' + i);
System.out.println(letter);
}
Negative Darstellung
Java und die meisten anderen Sprachen speichern negative Integralzahlen in einer Darstellung, die als 2-Komplement- Notation bezeichnet wird.
Für eine eindeutige binäre Darstellung eines Datentyps mit n
Bits werden Werte wie folgt codiert:
Die niedrigstwertigen n-1
Bits speichern eine positive ganze Zahl x
in integraler Darstellung. Der signifikanteste Wert speichert ein Bit mit dem Wert s
. Der durch diese Bits dargestellte Wert ist
x - s * 2 n-1
dh wenn das höchstwertige Bit 1 ist, ist ein Wert, der nur um 1 größer ist als die Anzahl, die Sie mit den anderen Bits darstellen könnten ( 2 n-2 + 2 n-3 + ... + 2 1 + 2 0 = 2 n-1 - 1
) wird abgezogen, wodurch eine eindeutige binäre Darstellung für jeden Wert von - 2 n-1 (s = 1; x = 0) bis 2 n-1 - 1 (s = 0; x = 2 n-1 - 1).
Dies hat auch den schönen Nebeneffekt, dass Sie die binären Darstellungen hinzufügen können, als ob sie positive binäre Zahlen wären:
v1 = x1 - s1 * 2n-1 v2 = x2 - s2 * 2n-1
s1 | s2 | x1 + x2 Überlauf | Zusatzergebnis |
---|---|---|---|
0 | 0 | Nein | x1 + x2 = v1 + v2 |
0 | 0 | Ja | zu groß, um mit Datentyp dargestellt zu werden (Überlauf) |
0 | 1 | Nein | x1 + x2 - 2n-1 = x1 + x2 - s2 * 2n-1 |
0 | 1 | Ja | (x1 + x2) mod 2n-1 = x1 + x2 - 2n-1 |
1 | 0 | * | siehe oben (Swap-Summanden) |
1 | 1 | Nein | zu klein, um mit Datentyp dargestellt zu werden (x1 + x2 - 2 n <-2 n-1 ; Unterlauf) |
1 | 1 | Ja | (x1 + x2) mod 2n-1 - 2n-1 = (x1 + x2 - 2n-1) - 2n-1 |
Beachten Sie, dass diese Tatsache das Finden der binären Darstellung des additiven Inversen (dh des negativen Werts) vereinfacht:
Beachten Sie, dass das Hinzufügen des bitweisen Komplements zu der Zahl dazu führt, dass alle Bits 1 sind. Fügen Sie 1 hinzu, um den Wert zum Überlauf zu bringen, und Sie erhalten das neutrale Element 0 (alle Bits 0).
Der negative Wert einer Zahl i
kann also berechnet werden (wobei hier eine mögliche Aufstiegsmöglichkeit nach int
ignoriert wird).
(~i) + 1
Beispiel: negativen Wert von 0 ( byte
) nehmen:
Das Ergebnis der Negierung von 0
ist 11111111
. Addiert man 1, erhält man einen Wert von 100000000
(9 Bit). Da ein byte
nur 8 Bits byte
kann, wird der Wert ganz links abgeschnitten und das Ergebnis lautet 00000000
Original | Verarbeiten | Ergebnis |
---|---|---|
0 (00000000) | Negieren | -0 (11111111) |
11111111 | Addiere 1 zu binär | 100000000 |
100000000 | Auf 8 Bit abschneiden | 00000000 (-0 entspricht 0) |
Speicherverbrauch von Primitiven vs. Boxed Primitiven
Primitive | Boxed Type | Speichergröße von primitiv / boxed |
---|---|---|
boolean | Boolean | 1 Byte / 16 Byte |
Byte | Byte | 1 Byte / 16 Byte |
kurz | Kurz | 2 Bytes / 16 Bytes |
verkohlen | Verkohlen | 2 Bytes / 16 Bytes |
int | Ganze Zahl | 4 Bytes / 16 Bytes |
lange | Lange | 8 Bytes / 16 Bytes |
schweben | Schweben | 4 Bytes / 16 Bytes |
doppelt | Doppelt | 8 Bytes / 16 Bytes |
Boxed-Objekte benötigen immer 8 Byte für die Typ- und Speicherverwaltung. Da die Größe der Objekte immer ein Vielfaches von 8 ist, benötigen Boxed-Typen insgesamt 16 Byte . Darüber hinaus beinhaltet jede Verwendung eines geschachtelten Objekt Speicher eine Referenz , die für weitere 4 oder 8 Bytes ausmacht, in Abhängigkeit von dem JVM und JVM - Optionen.
Bei datenintensiven Vorgängen kann der Speicherverbrauch die Leistung erheblich beeinflussen. Der Speicherbedarf steigt bei Verwendung von Arrays noch weiter: Für ein float[5]
-Array werden nur 32 Byte benötigt. Ein Float[5]
der 5 verschiedene Nicht-Null-Werte speichert, erfordert insgesamt 112 Byte (bei 64 Bit ohne komprimierte Zeiger erhöht sich dieser Wert auf 152 Byte).
Boxed Value Caches
Der Platzaufwand der Boxtypen kann durch die Boxed Value Caches bis zu einem gewissen Grad gemindert werden. Einige der geschachtelten Typen implementieren einen Cache von Instanzen. In der Integer
Klasse werden beispielsweise Instanzen zwischengespeichert, um Zahlen im Bereich von -128
bis +127
. Dies reduziert jedoch nicht die zusätzlichen Kosten, die durch die zusätzliche Speicherumleitung entstehen.
Wenn Sie eine Instanz eines geschachtelten Typs erstellen, indem Sie entweder autoboxing oder die statische valueOf(primitive)
-Methode aufrufen, versucht das Laufzeitsystem, einen zwischengespeicherten Wert zu verwenden. Wenn Ihre Anwendung viele Werte in dem zwischengespeicherten Bereich verwendet, kann dies den Speichernachteil bei der Verwendung von Boxed-Typen erheblich reduzieren. Wenn Sie Boxed Value-Instanzen "von Hand" erstellen, ist es valueOf
besser, valueOf
anstelle von new
. (Die new
Operation erstellt immer eine neue Instanz.) Wenn sich jedoch die Mehrheit Ihrer Werte nicht im zwischengespeicherten Bereich befindet, kann es schneller sein, new
aufzurufen und die Cache-Suche zu speichern.
Grundelemente konvertieren
In Java können wir zwischen ganzzahligen Werten und Gleitkommawerten konvertieren. Auch kann , da jedes Zeichen in eine Zahl in der Unicode - Codierung entspricht, char
können Typen zu und von den Ganzzahl- und Gleitkomma-Typen umgewandelt werden. boolean
ist der einzige primitive Datentyp, der nicht in einen oder aus einem anderen primitiven Datentyp konvertiert werden kann.
Es gibt zwei Arten von Konvertierungen: Konvertierung erweitern und Konvertierung einschränken .
Eine Erweiterungskonvertierung liegt vor, wenn ein Wert eines Datentyps in einen Wert eines anderen Datentyps konvertiert wird, der mehr Bits als der frühere belegt. In diesem Fall tritt kein Datenverlust auf.
Dementsprechend ist eine Einengungskonvertierung, wenn ein Wert eines Datentyps in einen Wert eines anderen Datentyps konvertiert wird, der weniger Bits als der vorherige besetzt. In diesem Fall kann es zu Datenverlust kommen.
Java führt Konvertierungen automatisch aus. Wenn Sie jedoch eine engere Konvertierung durchführen möchten (wenn Sie sicher sind, dass kein Datenverlust auftritt), können Sie Java zwingen, die Konvertierung mit einem Sprachkonstrukt durchzuführen, das als cast
.
Erweiterung der Konvertierung:
int a = 1;
double d = a; // valid conversion to double, no cast needed (widening)
Enge Umwandlung:
double d = 18.96
int b = d; // invalid conversion to int, will throw a compile-time error
int b = (int) d; // valid conversion to int, but result is truncated (gets rounded down)
// This is type-casting
// Now, b = 18
Primitive Typen Cheatsheet
Tabelle mit Größe und Wertebereich aller Grundtypen:
Datentyp | numerische Darstellung | Wertebereich | Standardwert |
---|---|---|---|
boolean | n / a | falsch und wahr | falsch |
Byte | 8 Bit signiert | -2 7 bis 2 7 - 1 | 0 |
-128 bis +127 | |||
kurz | 16 Bit signiert | -2 15 bis 2 15 - 1 | 0 |
-32.768 bis +32.767 | |||
int | 32-Bit signiert | -2 31 bis 2 31 - 1 | 0 |
-2.147.483.648 bis +2.147.483.647 | |||
lange | 64-Bit signiert | -2 63 bis 2 63 - 1 | 0L |
-9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 | |||
schweben | 32-Bit-Gleitkommazahl | 1.401298464e-45 bis 3.402823466e + 38 (positiv oder negativ) | 0,0F |
doppelt | 64-Bit-Gleitkommazahl | 4.94065645841246544e-324d bis 1.79769313486231570e + 308d (positiv oder negativ) | 0,0D |
verkohlen | 16-Bit unsigniert | 0 bis 2 16 - 1 | 0 |
0 bis 65.535 |
Anmerkungen:
- Die Java-Sprachspezifikation schreibt vor, dass signierte Integraltypen (
byte
bylong
) eine binäre Zweierkomplementdarstellung verwenden, und die Fließkommatypen verwenden standardmäßige binäre Fließkommadaten nach IEE 754. - Java 8 und höher stellen Methoden bereit, um vorzeichenlose arithmetische Operationen für
int
undlong
auszuführen. Während diese Methoden es einem Programm ermöglichen , Werte der jeweiligen Typen als unsigniert zu behandeln , bleiben die Typen mit Vorzeichen signierte Typen. - Der kleinste Fließpunkt, der oben angezeigt wird, ist subnormal . dh sie haben weniger Genauigkeit als ein normaler Wert. Die kleinsten Normalzahlen sind 1,175494351e-38 und 2,2250738585072014e-308
- Ein
char
stellt üblicherweise eine Unicode / UTF-16 - Code - Einheit. - Obwohl ein
boolean
nur ein Informationsbit enthält, variiert seine Größe im Speicher abhängig von der Implementierung der Java Virtual Machine (siehe Boolean-Typ ).