Elementare Datentypen
Überblick über die elementaren Datentypen
Elementare Datentypen auch primitive Datentypen genannt
- Sind fest in die Sprache eingebaut (Schlüsselworte)
- alle anderen Datentypen werden daraus zusammengesetzt
Die primitiven existieren in Java aus Performancegründen. Im Gegensatz zu anderen Sprachen (z. B. Ruby) hat man sich entschlossen, neben den klassenbasierten auch noch primitive Datentypen in Java zu verwenden. Da die primitiven Datentypen eine einfache Wertsemantik haben, kann man Operationen auf den Typen deutlich schneller ausführen als auf entsprechenden Klassentypen. Details hierzu werden später noch geliefert.
Wichtig zu verstehen ist, dass die primitiven Datentypen die Grundlage aller anderen Datentypen in Java sind. D. h. alle anderen Datentypen entstehen durch die Kombination der primitiven Datentypen.
Datentyp boolean
Der Java-Datentyp boolean stellt einen Wahrheitswert dar
- Wertebereich: { wahr, falsch }
- Literale:
trueundfalse - kann Ergebnis eines logischen Ausdrucks speichern
- Variable kann in Bedingungen und Schleifen verwendet werden
boolean b2;
boolean b1;
b1 = 5 < 7;
b2 = b1 && (8 != 3) || (4 == 5);
if (b1) {
System.out.println("b1 = true");
}
Der einfachste Datentyp in Java ist der Datentyp boolean. Er speichert einen einzigen Wahrheitswert und kann daher nur zwei Zustände darstellen: wahr (true) oder falsch (false).
Datentypen für Ganzzahlen
Ganzzahlen oder Ordinalzahlen (integer) haben einen endlichen Wertebereich (entsprechen einem Teil der ganzen Zahlen aus der Mathematik)
byte,short,int,long: Speicherung von Zahlen mit Vorzeichenchar: Ein Zeichen des Unicode-Zeichensatzes
| Datentyp | Breite (Bit) | Wertebereich |
|---|---|---|
byte | 8 | -27 – 27 - 1 |
short | 16 | -215 – 215 - 1 |
char | 16 | 0 – 216 - 1 |
int | 32 | -231 – 231 - 1 |
long | 64 | -263 – 263 - 1 |
Wichtig ist zu verstehen, dass die Ganzzahlen in einer Programmiersprache immer nur einen Teil der ganzen Zahlen aus der Mathematik abdecken können. Während die Zahlen in der Mathematik von Minus unendlich bis unendlich laufen, kann der Computer nur Zahlen einer bestimmten Größe speichern, da er sie auf Bitmuster endlicher Länge abbilden muss. Daher gibt es immer eine kleinste und größte Zahl, die man im Computer darstellen kann.
Um den Programmierer:innen eine möglichst platzsparende Speicherung der Zahlen zu gestatten, haben sie die Wahl zwischen verschiedenen Datentypen, die sich in der Anzahl der verwendeten Bits und damit im Wertebereich unterscheiden. Am wenigsten Platz benötigt der Datentyp byte und am meisten long. Wichtig ist, für ein Problem einen Datentyp mit hinreichend großem Wertebereich zu wählen, da (wie bereits erläutert) die Werte überlaufen können.
byte b = 127;
b = b + 1;
System.out.println(b); // -> -128
Der Datentyp char ist eine Besonderheit, da er sowohl zur Speicherung von Ganzzahlen als auch für Zeichen verwendet werden kann. Die Verwendung für Zahlen ist aber unüblich und sollte daher vermieden werden.
Literale für Ganzzahlen
Literale für Ganzzahlen
- Vorzeichen
- positives Vorzeichen kann weggelassen werden:
476oder+467 - negatives Vorzeichen ohne Leerzeichen:
-3521 - Datentyp
- standardmäßig hat das Literal den Typ
int - für
longmuss einLangehängt werden7000000000L
- Prefix
0für Oktalzahlen0xfür Hexadezimalzahlen0bfür Binärzahlen- ohne Prefix für Dezimalzahlen
Der Prefix für Oktalzahlen ist eine häufige Falle für Programmierneulinge. In der Mathematik ist es völlig egal, ob man 42 oder 042 schreibt. Beides bezeichnet dieselbe Zahl. In Java ist das anders, da durch die führende 0 eine Oktalzahl angezeigt wird. 042 entspricht der Dezimalzahl 34.
Datentyp char
- Zeichen werden mit dem Datentyp
charverwaltet - Wertebereich von 0 – 65535
- Repräsentiert ein einziges Unicode-Zeichen
- ist Grundlage für die Verwaltung von Zeichenketten (Strings)
Zeichenliterale
Zeichenliterale repräsentieren ein einziges Zeichen, umschlossen von einfachen Anführungszeichen '
Bestimmte Sonderzeichen müssen escaped, d. h. speziell notiert, werden
| Escape-Sequenz | Bedeutung |
|---|---|
\' | Anführungszeichen ' |
\\ | Backslash \ |
\t | Tabulator |
\n | Zeilenvorschub (newline) |
\r | Wagenrücklauf (carriage return) |
\b | Backspace |
\f | Seitenvorschub (form feed) |
Rechnen mit Zeichen
char kann als auch als Zahlenwert betrachtet werden und in Berechnungen und numerische Vergleiche eingehen
char a = 'A';
a++;
System.out.println(a); // -> B
char c = 'K';
if (('A' <= c) && (c <= 'Z')) {
// Großbuchstabe A-Z
}
Datentypen float und double
Typen für Fließkommazahlen in Java sind
double– 64-Bit Fließkommazahl- Wertebereich -1,79 10308 – 1,79 10308, maximal 15 Dezimalziffern
- Literale mit Dezimalpunkt
.und optionalem Exponentene, z. B.3.141,-0.02e-1oder6.23e23 float– 32-Bit Fließkommazahl- Wertebereich -3,4 1038 – 3,4 1038, maximal 7 Dezimalziffern
- Literale mit Dezimalpunkt
.undfund optionalem Exponentene, z. B.3.141f,-0.02e-1foder1.141e3f
In Java stehen für die Darstellung von Fließkommazahlen zwei primitive Datentypen zur Verfügung: float und double. Der Datentyp float belegt 32 Bit (4 Byte) Speicher und bietet eine Genauigkeit von etwa 6 bis 7 Dezimalstellen. Er eignet sich für Anwendungen, bei denen der Speicherverbrauch eine Rolle spielt und keine sehr hohe Genauigkeit erforderlich ist. Da Literale für Fließkommazahlen standardmäßig als double interpretiert werden, muss eine float-Literal mit dem Suffix f oder F gekennzeichnet werden, beispielsweise float f = 3.14f;.
Der Datentyp double ist mit 64 Bit (8 Byte) doppelt so groß wie float und stellt etwa 15 Dezimalstellen genau dar. Er ist der Standard-Datentyp für Fließkommazahlen in Java und wird bevorzugt verwendet, wenn höhere Genauigkeit erforderlich ist.
Beide Datentypen basieren auf dem IEEE-754-Standard zur Darstellung von Gleitkommazahlen.