1. Welche Zahlen gibt es?
In der Programmierung arbeiten wir ständig mit Zahlen – vom Alter eines Nutzers bis zur Anzahl der Sterne in der Galaxie oder den Kopeken auf einem Bankkonto. Doch verschiedene Aufgaben erfordern unterschiedliche Arten von Zahlen: Manchmal ist es wichtig, nur Ganzzahlen zu speichern, manchmal sehr genaue Dezimalzahlen, und manchmal werden Zahlen „ohne Minuszeichen“ benötigt.
Ganzzahlen (int und andere)
Eine Ganzzahl ist eine Zahl ohne Nachkommanteil.
In Java verwendet man am häufigsten den Typ int, daneben gibt es aber noch einige weitere Varianten, die sich in Größe und Wertebereich unterscheiden.
- int – der Standardtyp für Ganzzahlen. Er umfasst sehr große (und sehr kleine) Werte und benötigt dennoch nicht allzu viel Speicher. Zum Beispiel für Like-Zähler, Alter oder die Anzahl der Tage im Jahr wird fast immer int verwendet.
- long – wird verwendet, wenn die Werte sehr groß sein können (zum Beispiel Milliarden oder Billionen). Beispiel: die Gesamtzahl aller YouTube-Aufrufe seit Beginn speichern.
- short – ein sparsamer, aber selten benutzter Typ. Geeignet dort, wo viele gleichartige kleine Werte vorkommen (z. B. Audiodaten, Farbkomponenten).
- byte – für noch kleinere Werte, besonders in Grafik und Dateiverarbeitung, wo Speicherersparnis wichtig ist.
Gleitkommazahlen (double, float)
Manchmal muss man mit Zahlen arbeiten, die einen Nachkommanteil haben. Zum Beispiel Lufttemperatur, der Notendurchschnitt eines Studenten oder der Warenpreis mit Cent.
- double – der „Standardtyp“ zur Speicherung von Gleitkommazahlen. Für die meisten Berechnungen ausreichend genau (Beispiel: 3.1415926535…).
- float – leichter und weniger genau; häufiger in Aufgaben der Computergrafik oder bei der Verarbeitung großer Datenmengen anzutreffen, wo Speicherersparnis wichtig ist.
Spezielle Zahlentypen
- BigInteger – wenn man mit riesigen Zahlen arbeiten muss, die die Standardwertebereiche überschreiten, etwa in der Kryptographie oder bei astronomischen Berechnungen.
- BigDecimal – eine Klasse für exakte Berechnungen mit Dezimalzahlen (Finanzen, Zinsberechnung); hilft, Ungenauigkeiten zu vermeiden, die double und float eigen sind.
2. Wertebereiche
Ganzzahltypen können sowohl positive als auch negative Zahlen speichern. Das ist praktisch, wenn Werte „sowohl über als auch unter Null“ liegen können: zum Beispiel Temperatur, Kontostand, Höhe relativ zum Meeresspiegel.
Beispiel:
- int : -10, 0, 50
- long : 0, 10, -1000_000_000_000_000_000L
Ganzzahltypen
| Typ | Größe | Wertebereich | Beispielwerte |
|---|---|---|---|
|
1 Byte | -128 bis 127 | -128, 0, 127 |
|
2 Byte | -32 768 bis 32 767 | -1000, 0, 32000 |
|
4 Byte | -2 147 483 648 bis 2 147 483 647 | -1000000, 0, 2000000 |
|
8 Byte | -9 223 372 036 854 775 808 bis 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
Gleitkommatypen
| Typ | Größe | Beispielwerte | Beschreibung |
|---|---|---|---|
|
4 Byte | 3.14f, -0.001f | einfache Genauigkeit (7 Stellen) |
|
8 Byte | 3.1415, -1.7E+308 | doppelte Genauigkeit (15–16 Stellen) |
3. Suffixe für Zahlen
In manchen Situationen muss man explizit angeben, welchen Typ man für eine Zahl verwenden möchte. Das geschieht mit Hilfe von Suffixen:
- L oder l – für den Typ long (z. B. 10000000000L)
- F oder f – für den Typ float (z. B. 3.14f)
- D oder d – für den Typ double (meist nicht nötig, weil Gleitkommazahlen ohne Suffix double sind)
Wenn man kein Suffix angibt, gilt standardmäßig: Eine Ganzzahl ist ein int, eine Gleitkommazahl ein double. Zum Beispiel ist 42 ein int und 3.14 ein double.
Wozu ist das nötig? Damit es z. B. keinen Fehler gibt, wenn man einer Variable vom Typ long eine große Zahl zuweist:
long bigNumber = 9000000000L; // Ohne L führt das zu einem Kompilierungsfehler
Trennzeichen als Unterstrich _
Wenn Zahlen lang sind, kann man sich leicht in den Nullen verheddern. Für Übersicht und bessere Lesbarkeit kann man in Java Unterstriche innerhalb von Zahlen verwenden.
int population = 146_700_000;
long stars = 100_000_000_000L;
Das ist völlig legal: Der Compiler ignoriert die Unterstriche, und Sie sehen die Stellen „auf einen Blick“. Wichtig ist – keinen Unterstrich am Anfang, am Ende, nach dem Punkt oder vor dem Suffix zu setzen.
4. Zeichentyp char: was ist das und wozu?
Der Typ char wird zur Speicherung eines einzigen Zeichens verwendet: Buchstabe, Ziffer, Satzzeichen, Leerzeichen, Sonderzeichen und sogar Smiley.
Beispiele:
char letter = 'A';
char digit = '7';
char symbol = '?';
char cyrillic = '\u0416';
char euro = '€';
char smile = '☺'; // Ja, das geht auch!
Wichtige Regeln:
- Ein Wert des Typs char wird in einfachen Anführungszeichen notiert: 'A', '7', '#'.
- Es ist genau ein Zeichen! Wenn man 'AB' schreibt, beschwert sich der Compiler.
- Hinter jedem Zeichen steckt ein numerischer Code (Unicode).
Unicode: Zeichen aus aller Welt
Java verwendet den Standard Unicode, wodurch sich nicht nur lateinische Buchstaben, sondern auch Kyrillisch, Ideogramme, Emojis und sogar altägyptische Hieroglyphen speichern lassen (falls es einmal nötig sein sollte).
Interessante Tatsache:
Der Typ char ist im Grunde eine 16-Bit-Zahl (von 0 bis 65535), wobei jedem Wert ein eigenes Zeichen entspricht.
5. Zeichen und Zahlen: Verbindung über Unicode
Da jedes Zeichen intern eine Zahl ist, können wir char in int und zurück umwandeln.
Beispiel: den Unicode-Code eines Zeichens ermitteln
public class CharToInt {
public static void main(String[] args) {
char ch = 'A';
int code = ch; // Implizite Umwandlung char → int
System.out.println("Unicode-Code des Zeichens '" + ch + "': " + code);
}
}
Ergebnis:
Unicode-Code des Zeichens 'A': 65
Und jetzt umgekehrt – das Zeichen aus dem Code erhalten:
public class IntToChar {
public static void main(String[] args) {
int code = 1040; // Code des Buchstabens '\u0410' in Unicode (Kyrillisch)
char ch = (char) code; // Explizite Umwandlung int → char
System.out.println("Zeichen mit dem Code " + code + ": " + ch);
}
}
Ergebnis:
Zeichen mit dem Code 1040: \u0410
6. Grundlegende primitive Typen in Java
| Typ | Größe (Bit) | Wertebereich | Beispielwert | Hinweis |
|---|---|---|---|---|
|
8 | -128 ... 127 | 42 | Wird sehr selten verwendet |
|
16 | -32,768 ... 32,767 | 12345 | Zur Speicherersparnis |
|
32 | -2,147,483,648 ... 2,147,483,647 | 1000000 | Standard für Ganzzahlen |
|
64 | ≈ −9.22 × 1018 ... ≈ 9.22 × 1018 | 5000000000L | Für sehr große Ganzzahlen |
|
32 | ~±3.4 × 10-38 ... ±3.4 × 1038 | 3.14f | Gleitkommazahlen, geringe Genauigkeit |
|
64 | ~±1.7 × 10-308 ... ±1.7 × 10308 | 2.718 | Gleitkommazahlen, hohe Genauigkeit |
|
16 | 0 ... 65 535 (Unicode) | '\u0416', 'A', '?' | Ein einzelnes Zeichen |
|
1 | true, false | true | Logischer Wert |
GO TO FULL VERSION