1. Liste der primitiven Typen

Java hat 8 grundlegende primitive Typen. Sie werden als primitiv bezeichnet, da die Werte dieser Typen keine Objekte sind und direkt in Variablen gespeichert werden.

Hier ist eine Tabelle mit einigen kurzen Informationen zu diesen Typen:

Typ Größe
in Bytes
Wertebereich Standardwert Beschreibung
byte 1 -128 .. 127 0 Der kleinste Integer-Typ ist ein einzelnes Byte
short 2 -32.768 .. 32.767 0 Kurze Ganzzahl, zwei Bytes
int 4 -2*10 9 .. 2*10 9 0 Ganzzahl, 4 Bytes
long 8 -9*10 18 .. 9*10 18 0L Lange Ganzzahl, 8 Bytes
float 4 -10 38 .. 10 38 0.0f Gleitkommazahl, 4 Bytes
double 8 -10 308 .. 10 308 0.0d Gleitkommazahl mit doppelter Genauigkeit, 8 Byte
boolean 1 true,false false Boolescher Typ (nur trueund false)
char 2 0 .. 65.535 '\u0000' Zeichen, 2 Bytes, alle größer als 0
Standardwert

Hier ist übrigens eine wichtige Nuance. Wenn Sie eine Instanzvariable (Feld) oder eine statische Klassenvariable deklarieren und ihr nicht sofort einen Wert zuweisen, wird sie mit einem Standardwert initialisiert . Die Tabelle enthält eine Liste dieser Werte.

Lokale Variablen in einer Methode haben keinen Standardwert. Wenn Sie solchen Variablen keinen Wert zuweisen, gelten sie als nicht initialisiert und können nicht verwendet werden.

Aber kehren wir zu den primitiven Typen zurück und schauen uns sie genauer an.



2. Ganzzahltypen

Java hat 4 Integer-Typen : byte, shortund int. longSie unterscheiden sich in ihrer Größe und dem Wertebereich, den sie speichern können.

intTyp

Am häufigsten wird der intTyp verwendet. Der Name kommt vom Wort int eger (ganze Zahl). Alle ganzzahligen Literale (ganze Zahlen) im Code sind ints(sofern sie nicht auf L, Foder enden D).

Variablen dieses Typs können Werte von -2,147,483,648bis annehmen +2,147,483,647.

Das ist viel und reicht für fast jeden Anlass. Fast jede Funktion, die eine Zahl zurückgibt, gibt eine zurück int.

Beispiele:

Code Erläuterung
int n = "String".length();
Die length()Methode gibt die Länge eines Strings zurück
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
Das lengthFeld enthält die Länge des Arrays.

shortTyp

Der shortTyp hat seinen Namen von short int. Es wird oft auch als kurze Ganzzahl bezeichnet . Im Gegensatz zum intTyp beträgt seine Länge nur zwei Bytes und der Bereich möglicher Werte reicht von -32,768bis +32,767.

Das bedeutet, dass man darin nicht die Zahl eine Million speichern kann. Oder sogar 50.000. Dies ist der am seltensten verwendete Integer-Typ in Java. Der Hauptgrund für die Verwendung ist die Erhaltung des Gedächtnisses.

Angenommen, Sie befinden sich in einer Situation, in der Sie im Voraus wissen, dass Sie mit Werten arbeiten werden, die niemals 30.000 überschreiten, und dass es Millionen dieser Werte geben wird.

Angenommen, Sie schreiben eine Anwendung, die Bilder mit ultrahoher Auflösung verarbeitet, die 10-Bits pro Farbe verwenden. Und Ihr Bild hat eine Million Pixel. Dies ist ein Szenario, in dem die Entscheidung zur Verwendung von intoder shortvon Bedeutung ist.

longTyp

Dieser Typ hat seinen Namen von long intund wird auch als Long Integer bezeichnet . Im Gegensatz zum intTyp verfügt er über einen sagenhaft enormen Wertebereich: von bis .-9*1018+9*1018

Warum ist es nicht der grundlegende Integer-Typ?

Weil Java Mitte der 90er Jahre erschien, als die meisten Computer 32-Bit waren. Das bedeutet, dass alle Prozessoren für die Arbeit mit Zahlen mit 32 Bit optimiert wurden. Prozessoren konnten mit 64-Bit-Ganzzahlen arbeiten, der Betrieb mit ihnen war jedoch langsamer.

Aus diesem Grund entschieden sich Programmierer vernünftigerweise dafür, intden Standard-Integer-Typ zu erstellen und ihn longnur dann zu verwenden, wenn es wirklich notwendig ist.

byteTyp

Dies ist der kleinste Integer-Typ in Java, wird aber bei weitem nicht am seltensten verwendet. Sein Name byteist auch das Wort für den kleinsten adressierbaren Speicherblock in Java.

Es gibt nicht so viele gültige Werte für den byteTyp: from -128to +127. Aber das ist nicht seine Stärke. Der byteTyp wird am häufigsten verwendet, wenn Sie große Blobdaten im Speicher speichern müssen. Ein Array von bytes ist hierfür ideal.

Angenommen, Sie müssen eine Datei irgendwohin kopieren.

Sie müssen den Inhalt der Datei nicht verarbeiten: Sie möchten lediglich einen Speicherbereich (Puffer) erstellen, den Inhalt der Datei hinein kopieren und diese Daten dann aus dem Puffer in eine andere Datei schreiben. byteHierfür benötigen Sie ein Array.

Beachten Sie, dass eine Array-Variable nur einen Verweis auf einen Speicherbereich speichert. Wenn die Variable an eine Methode übergeben wird, wird nur die Speicheradresse übergeben. Der Speicherblock selbst wird nicht kopiert.

byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
   int size = sourceFile.read(buffer); // Read data from a file into a buffer
   destFile.write(buffer, 0, size); // Write data from the buffer to a file

   // Stop copying if the buffer is not full
   if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();


3. Echte Typen

Zu den primitiven Typen gehören zwei Typen für reelle Zahlen. Obwohl es nicht ganz korrekt ist, diesen Begriff zu verwenden. Wenn Computer reelle Zahlen verarbeiten, nennen wir sie Gleitkommazahlen . Der Name stammt von einem Standard zur Darstellung von Zahlen, bei dem die ganzzahligen und gebrochenen Teile einer Zahl durch einen Punkt (einen Punkt, kein Komma) getrennt werden.

Einige hilfreiche Informationen:

Jedes Land hat seine eigenen Standards für das Schreiben von Zahlen (Überraschung!).

Viele Menschen sind es gewohnt, Punkte als Tausendertrennzeichen und Kommas als Dezimaltrennzeichen zu verwenden: Sie schreiben beispielsweise one million ones and 153 thousandthsals 1.000.000,153. Aber in den Vereinigten Staaten, wo die Entwickler von Java lebten, wurde ein anderer Standard übernommen:1000000.153

Java hat zwei Gleitkomma-Primitivtypen: doubleund float.

Wie bereits erwähnt, haben diese Typen eine sehr spezifische interne Anordnung: Tatsächlich befindet sich in jeder Variablen dieser Typen nicht eine Zahl, sondern zwei:

Beispielsweise kann die Gleitkommazahl 987654.321als dargestellt werden . Dann wird es im Speicher als zwei Zahlen dargestellt (die Mantisse , also der signifikante Teil der Zahl) und ( Exponent , also eine Zehnerpotenz)0.987654321*1069876543216

floatTyp

Der Name des floatTyps kommt von float ing-point number . Die Größe dieses Typs ist recht klein – nur 4 Bytes (32 Bits) – aber er kann Werte von bis speichern . Für die Darstellung der Mantisse sind 24 Bit vorgesehen, für den Exponenten 8 Bit. Dieser Typ kann nur 8 signifikante Ziffern speichern.-3.4*10383.4*1038

Dieser Ansatz ermöglicht es, viel größere Zahlen als eine zu speichern intund dabei die gleichen 4 Bytes zu verwenden. Aber dafür opfern wir Genauigkeit. Da ein Teil des Speichers die Mantisse speichert, speichern diese Variablen nur 6–7 Dezimalstellen, während der Rest verworfen wird.

Beispiel:

Code Wert
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

Wie Sie sehen, besteht der Hauptnachteil dieses Typs in der sehr geringen Anzahl signifikanter Ziffern und dem Verlust an Präzision ab der achten Ziffer. Deshalb floatist der Typ bei Java-Programmierern nicht sehr beliebt.

doubleTyp

Der doubleTyp ist der Standard-Gleitkommatyp. Der Name kommt von Gleitkommazahl mit doppelter Genauigkeit . Alle echten Literale sind doublestandardmäßig s.

Dieser Typ benötigt 8 Byte Speicher (64 Bit) und kann Werte von bis speichern . Wichtig zu wissen ist, dass 53 Bits für die Mantisse reserviert sind, während die restlichen 11 für den Exponenten bestimmt sind.-1.7*103081.7*10308

Dadurch können 15–17 signifikante Ziffern gespeichert werden.

Beispiel:

Code Wert
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

Diese Präzision, insbesondere im Vergleich zum floatTyp, ist entscheidend: 99 % aller Operationen mit reellen Zahlen werden mit dem doubleTyp durchgeführt.

11Für den Exponenten werden Bits zugewiesen, was bedeutet, dass Sie Zehnerpotenzen von -323bis speichern können +308(das ist eine Zweierpotenz von -1024bis +1023). Der doubleTyp kann problemlos eine Zahl mit Hunderten von Nullen nach dem Dezimalpunkt speichern:

Code Wert
double a = 2E-300 * 3E+302
600.0


4. Unendlichkeit

Gleitkommazahlen haben eine weitere interessante Eigenschaft: Sie können einen speziellen Wert speichern, der Unendlich bezeichnet . Und Sie können positive Unendlichkeit und negative Unendlichkeit darstellen .

Beispiele:

Code Notiz
System.out.println( 100.0 / 0.0 );
Infinity
System.out.println( -100.0 / 0.0 );
-Infinity
double a = 1d / 0d;
double b = a * 10;
double c = b - 100;
a == Infinity
b == Infinity
c == Infinity

Wenn man Unendlich mit einer Zahl multipliziert, erhält man Unendlich. Addiert man eine Zahl zur Unendlichkeit, erhält man die Unendlichkeit. Das ist super praktisch.

Keine Zahl ( NaN)

Alle Operationen mit Unendlichkeit ergeben Unendlich. Nun ja, die meisten, aber nicht alle.

Gleitkommazahlen können einen weiteren Sonderwert speichern: NaN. Es ist die Abkürzung für N ot a Number (keine Zahl).

Wenn man in der Mathematik Unendlich durch Unendlich dividiert, ist das Ergebnis undefiniert.

Aber wenn man in Java Unendlich durch Unendlich dividiert, ist das Ergebnis NaN.

Beispiele:

Code Notiz
System.out.println(0.0 / 0.0);
NaN
double infinity = 1d / 0d;
System.out.println(infinity / infinity);

NaN
double a = 0.0 / 0.0;
double b = a * 10;
double c = b - 100;
double d = a + infinity;
a == NaN
b == NaN
c == NaN
d == NaN

Jede Operation mit NaNErträgen NaN.



5. charTyp

Unter den primitiven Typen von Java verdient einer besondere Aufmerksamkeit: der charTyp. Sein Name kommt vom Wort char acter und der Typ selbst wird zum Speichern von Zeichen verwendet.

Zeichen sind das, woraus Zeichenfolgen bestehen, oder? Zeichenfolgen sind eine Reihe von Zeichen.

Aber noch interessanter ist die Tatsache, dass der charTyp auch ein numerischer Typ ist ! Es handelt sich sozusagen um einen Doppelzwecktyp.

Die Realität ist, dass der charTyp eigentlich keine Zeichen darstellt. Stattdessen werden Zeichencodes aus der Unicode-Kodierung gespeichert. Jedes Zeichen entspricht einer Zahl: dem numerischen Code des Zeichens.

Jede charVariable belegt zwei Bytes im Speicher (dasselbe wie der shortTyp). shortIm Gegensatz zum Typ ist der Integer-Typ jedoch charvorzeichenlos und kann Werte von 0bis speichern 65,535.

Der charTyp ist ein Hybridtyp. Seine Werte können sowohl als Zahlen (z. B. addieren und multiplizieren) als auch als Zeichen interpretiert werden. Dies geschah, weil Zeichen zwar visuelle Darstellungen sind, für einen Computer jedoch vor allem nur Zahlen sind. Und es ist viel bequemer, mit ihnen als Zahlen zu arbeiten.

Unicode

Unicode ist eine spezielle Tabelle (Kodierung), die alle Zeichen der Welt enthält. Und jedes Zeichen hat seine eigene Nummer. Es sieht ungefähr so ​​aus:

Primitive Typen in Java

Es gibt verschiedene Möglichkeiten, einer Variablen einen Wert zuzuweisen char.

Code Beschreibung
char a = 'A';
Die aVariable enthält den lateinischen Buchstaben A.
char a = 65;
Die aVariable enthält den lateinischen Buchstaben A. Sein Code ist 65.
char a = 0x41;
Die aVariable enthält den lateinischen Buchstaben A.
Sein Code ist 65, was 41im Hexadezimalsystem gleich ist.
char a = 0x0041;
Die aVariable enthält den lateinischen Buchstaben A.
Sein Code ist 65, was 41im Hexadezimalsystem gleich ist.
Die beiden zusätzlichen Nullen ändern nichts.
char a = '\u0041';
Die aVariable enthält den lateinischen Buchstaben A.
Eine andere Möglichkeit, ein Zeichen anhand seines Codes zu definieren.

Am häufigsten wird das Zeichen einfach in Anführungszeichen angegeben (wie in der ersten Zeile der Tabelle). Allerdings ist auch die letztere Methode beliebt. Sein Vorteil ist, dass es in Strings verwendet werden kann.

Und wie gesagt, der charTyp ist auch ein Ganzzahltyp, Sie können also etwa Folgendes schreiben:

Code Konsolenausgabe
char a = 'A';
a++;
System.out.println(a);
Der lateinische Buchstabe Bwird auf dem Bildschirm angezeigt.
Denn:
A65
B66
C67

Arbeiten mit chars

Jedes charist zunächst eine Zahl (Zeichencode) und dann ein Zeichen. Wenn Sie einen Zeichencode kennen, können Sie das Zeichen jederzeit in Ihrem Programm abrufen. Beispiel:

Code Konsolenausgabe
char c = (char) 1128;
System.out.println(c);

Ѩ

Standardcodes

Hier sind die bekanntesten Zeichencodes:

Figuren Codes
0, 1, 2, ...9 48, 49, 50, ...57
a, b, c, ...z 97, 98, 99, ...122
A, B, C, ...Z 65, 66, 67, ...90


6. booleanTyp

Und der letzte primitive Typ ist boolean.

Wie Sie bereits wissen, kann es nur zwei Werte annehmen: trueund false.

Und damit wissen Sie bereits alles, was Sie über diesen Typ wissen müssen.