Gibt es einen berechtigten Grund zu verwenden, um neue und ein Konstruktor auf einer Reihe Klasse in Java?

StackOverflow https://stackoverflow.com/questions/1009087

  •  06-07-2019
  •  | 
  •  

Frage

Gibt es einen berechtigten Grund in Java so etwas wie

Long l = new Long(SOME_CONSTANT)

Dies schafft ein zusätzliches Objekt und wird von FindBugs markiert, und ist offensichtlich eine schlechte Praxis. Meine Frage ist, ob es überhaupt ein guter Grund, dies zu tun?

ich vorher gebeten, dies zu String Bauer und bekam eine gute Antwort , aber diese Antwort scheint nicht zu Zahlen gelten.

War es hilfreich?

Lösung

Nur wenn man Ihnen eine einzigartige Instanz erhalten, um sicherzustellen, will, so praktisch nie.

können Einige Zahlen im Cache gespeichert werden, wenn autoboxed (obwohl Longs sind nicht zu ) garantiert, die Probleme verursachen könnten. Aber jeder Code, der wegen Caching brechen würde wahrscheinlich hat tiefere Fragen. Gerade jetzt, ich kann nicht glauben, von einem einzigen gültigen Fall für sie.

Andere Tipps

  

Meine Frage ist, ob es überhaupt ein guter Grund, dies zu tun?

Sie können es immer noch verwenden, wenn Sie Code kompatibel mit älteren JREs schreiben möchten. valueOf (lang) wurde nur in Java 1.5, also in Java 1.4 und vor dem Konstruktor war der einzige Weg, direkt von einem lang a lange . Ich erwarte, dass es nicht veraltet, weil der Konstruktor noch intern verwendet wird.

Das einzige, was ich denken kann, ist die Box explizit zu machen, obwohl das äquivalent autoboxed Code tatsächlich in Long.valueOf kompiliert wird (SOME_CONSTANT), die kleinen Werte zwischenspeichern kann: (von Jvm src)

   public static Long valueOf(long l) {
    final int offset = 128;
    if (l >= -128 && l <= 127) { // will cache
        return LongCache.cache[(int)l + offset];
    }
        return new Long(l);
  }

. Keine große Sache, aber ich mag nicht zu sehen Code, der ständig Boxen und unboxes ohne Rücksicht auf Art, die schlampig bekommen kann.

Funktionell, aber ich kann keinen Unterschied der einen oder der anderen sehen. Die neue lange wird noch berechnen, wie gleich und Hash-Code entspricht den autoboxed ein, so kann ich nicht sehen, wie Sie auch einen funktionellen Unterschied machen könnten, wenn man will.

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