Die Standardpraxis besteht darin, mit den Primitiven zu arbeiten, es sei denn, Sie haben es mit Generika zu tun (achten Sie darauf, dass Sie auf Autoboxing und Unboxing achten !).
Es gibt eine Reihe von guten Gründen, der Konvention zu folgen:
1. Sie vermeiden einfache Fehler:
Es gibt einige subtile, nicht intuitive Fälle, die Anfänger häufig herausfordern. Sogar erfahrene Programmierer geraten aus dem Ruder und machen manchmal diese Fehler (hoffentlich wird dies von einem Fluch gefolgt, wenn sie den Code debuggen und den Fehler finden!).
Der häufigste Fehler ist die Verwendung von a == b
anstelle von a.equals(b)
. Die Leute sind es gewohnt, a == b
mit Primitiven umzugehen, so dass dies mit den Objekt-Wrappern problemlos möglich ist.
Integer a = new Integer(2);
Integer b = new Integer(2);
if (a == b) { // Should be a.equals(b)
// This never gets executed.
}
Integer c = Integer.valueOf(2);
Integer d = Integer.valueOf(2);
if (c == d) { // Should be a.equals(b), but happens to work with these particular values!
// This will get executed
}
Integer e = 1000;
Integer f = 1000;
if (e == f) { // Should be a.equals(b)
// Whether this gets executed depends on which compiler you use!
}
2. Lesbarkeit:
Betrachten Sie die folgenden zwei Beispiele. Die meisten Leute würden sagen, die zweite ist besser lesbar.
Integer a = 2;
Integer b = 2;
if (!a.equals(b)) {
// ...
}
int c = 2;
int d = 2;
if (c != d) {
// ...
}
3. Leistung:
Tatsache ist , es ist langsamer , den Object - Wrapper für Primitive zu verwenden , als nur die Grundelemente verwenden. Sie addieren die Kosten für Objektinstanziierung, Methodenaufrufe usw. zu den Dingen, die Sie überall verwenden .
Knuths Zitat "... sagt in 97% der Fälle: Vorzeitige Optimierung ist die Wurzel allen Übels" trifft hier nicht wirklich zu. Er sprach von Optimierungen, die den Code (oder das System) komplizierter machen - wenn Sie Punkt 2 zustimmen, ist dies eine Optimierung, die den Code weniger kompliziert macht!
4. Es ist die Konvention:
Wenn Sie für 99% der anderen Java-Programmierer eine andere Stilauswahl treffen, gibt es zwei Nachteile:
- Sie werden feststellen, dass der Code anderer Leute schwerer zu lesen ist. 99% der Beispiele / Tutorials / etc verwenden Primitive. Wann immer Sie eines lesen, haben Sie den zusätzlichen kognitiven Aufwand, darüber nachzudenken, wie es im gewohnten Stil aussehen würde.
- Andere Leute finden Ihren Code schwerer zu lesen. Wann immer Sie Fragen zu Stack Overflow stellen, müssen Sie Antworten / Kommentare durchsuchen, in denen Sie gefragt werden, warum Sie keine Grundelemente verwenden. Wenn Sie mir nicht glauben, schauen Sie sich einfach die Kämpfe an, die die Leute über Dinge wie die Platzierung von Klammern führen, die sich nicht einmal auf den generierten Code auswirken!
Normalerweise würde ich einige Kontrapunkte auflisten, aber ich kann mir ehrlich gesagt keine guten Gründe vorstellen, hier nicht zur Convention zu gehen!