Frage

Gibt es einen Grund Integer.valueOf (X) zu verwenden, um eine endgültige Integer initialisiert werden, wie folgt:

public class MyClass
{
  public static final Integer DAY_1 = Integer.valueOf(1); // Why do it this way?
  public static final Integer DAY_2 = 2; // When it can be done this way?
}

Ich verstehe dies in älteren Versionen von Java erforderlich war, bevor Autoboxing hinzugefügt wurde. Keinerlei Grund für diese Art von Code bleiben? Oder ist es nur eine schlechte Gewohnheit?

War es hilfreich?

Lösung

  • Es gibt eine Menge Code geschrieben, bevor 1,5 herauskam. Es gibt keine Notwendigkeit, alles ohne die Erhebung von Nutzen zu aktualisieren.
  • In einigen Fällen macht es deutlicher, dass Sie sind Boxen. Im Fall gab man Sie bequem die Zielart auf der gleichen Linie sehen - aber das ist nicht immer der Fall
  • .
  • Wenn Sie eine Methode aufrufen möchten, die Überlastungen sowohl für Integer und int hat und Sie möchten die Integer Überlastung nennen, ist dies eine einfache Möglichkeit, es zu tun.

Andere Tipps

Ein Programmierer könnte zu wählen, um es auf diese Weise zu schreiben, um visuell zu betonen, dass DAY_1 ein ganze Zahl (Objekt), kein int.

Ich sage nicht, dass ich es empfehlen, aber ich konnte aus diesem Grund jemand diesen Ansatz vorstellen.

Neben Jons Gründen einfach einige Leute nicht wie Auto (un) Boxen, period. Es gibt viele Nuancen, um es, dass manche Menschen durch das Verbot ihrer Verwendung im allgemeinen durch optionale Kompilierung Fehler oder Warnungen zu vermeiden kategorisch wählen (Eclipse kann sie in Fehler oder Warnungen drehen, z.)

Wenn das der Fall ist, gibt es nicht viel Auswahl neben den ersten Verwendung, auch in Fällen wie diesem, wo es nicht wirklich vor sich gewinnt viel.

Was den Compiler angeht, so gibt es keinen Unterschied (obwohl man im Falle von überladenen Argumente verwenden Sorgfalt sollte). Unter der Motorhaube wird die Form gezeigt für DAY_2 einfach in das Formular für DAY_1 vom Compiler verwendet umgewandelt.

Für Menschen, könnte es ein Unterschied. Ich in der Regel automatisch (un) Boxen als Akt der defensiven Programmierung vermeiden, weil ich das Gefühl, dass die Praxis macht es auch einfach für mich, den Null-Fall zu vergessen. Aber wirklich, es liegt an dir.

Autoboxing kann zu sehr subtilen Bugs führen, die sehr schwierig sein kann, zu finden. Aus diesem Grund haben einige IDEs Fähigkeit, eine Warnung, wenn jede Art von Boxen / Unboxing zu erzeugen, verwendet wird. Wenn Sie diese Warnungen Option zum Schweigen bringen wollen 1 wird es für Sie tun.

Also, am Ende, es kommt alles auf den persönlichen Vorlieben und Projektes Coding-Standards.

In diesem speziellen Fall besteht keine Gefahr für Autoboxing verwendet wird.

Integer.valueOf (1) ermöglicht das Zwischenspeichern von gemeinsamen Werten; für die Werte von -128 bis 128, es wird immer das gleiche Objekt beispielsweise zurück, während new Integer (1) immer ein neues Objekt zurück. Ich würde sagen, es ist ein gute Praxis ist dies die Verwendung für alle Anzahl abgeleiteten Typen (Integer, Long, BigDecimal, etc.), obwohl dies wahrscheinlich das, was Autoboxing ohnehin unter der Decke zu tun.

Bart van Heukelom, der Unterschied zwischen list.remove (1) und list.remove (new Integer (1)) ist dies; list.remove (1) wird das Objekt mit dem Index 1 aus der Liste, list.remove (new Integer (1)) entfernt alle Objekte in der Liste entfernen, die mit einem Wert von eins an das Integer-Objekt gleich sind. Denken Sie daran, dass die Kollektionen nicht Primitive speichern, nur Objekte.

Es ist eine schlechte Angewohnheit, und es gibt keinen Grund, es zu tun, da die Kompilierung wird die Integer.valueOf() für Sie generiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top