Wann soll ich mir Gedanken über die Wahl von Datentypen machen?

Jedes Mal, wenn du Variablen oder Rückgabewerte definierst und verwendest musst du dir Gedanken über Datentypen machen.

Jeder Datentyp beschreibt bestimmte Verwendungszwecke. Soll beispielsweise mit einer Zählvariable durch eine Datenstruktur iteriert werden, oder soll ein Vergleich auf Identität mit ganzen Zahlen erfolgen, nimmt man int. Die Verwendung von Fließpunktzahlen als Zählvariable kann beim Vergleich auf Identität fehlschlagen, da nicht jede Zahl exakt als Fließpunktzahl darstellbar ist. Aufgrund der internen Zahlendarstellung haben Fließpunktzahlen eine begrenzte Genauigkeit.

double x = 0.0;

while (x != 1) {
    x += 0.1;
    System.out.println(x);
}

In diesem Beispiel wird die Schleife – entgegen der Erwartung – nicht nach dem 10-ten Durchlauf abgebrochen.

Betrachtet man die Ausgabe unten, sieht man, dass verschiedene Werte nur näherungsweise dargestellt werden.

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2
...

Bei mathematischen Berechnungen ist oft ein großer Wertebereich wichtig. Hier nimmt man meist double als Datentyp.

Bei Datensammlungen ist es wichtig, die zur Aufgabe passende Datenstruktur (Array, List, Set, Map, Queue, Stack, …) zu finden. Jede dieser Datenstrukturen bietet spezifische Möglichkeiten und Einschränkungen. Die richtige Wahl hat Einfluss auf die Komplexität des Sourcecodes und die Performance – ist also entscheidend für die Lesbarkeit und Wiederverwendbarkeit des Codes sowie die Ausführungsgeschwindigkeit des Programms.