Warum ist die Vermeidung der Booleschen Instantiierung eine gute Idee?

8

PMD warnt mich vor boolescher Instanziierung (aus Effizienzgründen). Ich habe so etwas

%Vor%

Und ich soll das verwenden

%Vor%

Warum ist das besser?

    
dertoni 17.07.2014, 07:17
quelle

3 Antworten

11

Der Grund dafür ist, dass der neue boolesche Wert immer eine neue Instanz zurückgibt. Da Boolesche Instanzen unveränderlich sind, ist es nicht sinnvoll, mehr als 2 Instanzen zu haben. Eins für falsch und eins für wahr.

Versuchen Sie es und Sie werden

sehen %Vor%     
René Link 17.07.2014, 07:20
quelle
9

Aus der Dokumentation können Sie lesen:

%Vor%

Ordnet ein boolesches Objekt zu, das das value-Argument darstellt.

Hinweis: Es ist selten sinnvoll, diesen Konstruktor zu verwenden. Wenn keine neue Instanz benötigt wird, ist die statische Fabrik valueOf (boolean) im Allgemeinen eine bessere Wahl. Es wird wahrscheinlich zu einer wesentlich besseren Raum- und Zeitleistung führen.

    
PKlumpp 17.07.2014 07:20
quelle
4

In Java ist Boolean (wie String) unveränderlich. Das heißt, wenn Sie

verwenden %Vor%

x zeigt nach "x = false" auf ein anderes Objekt als zuvor. Wenn Sie also die Boolean.valueOf () -Methode verwenden, wird Java darauf achten, dass es nur zwei Boolean-Objekte gibt, von denen eines für wahr und das andere für falsch steht. Wenn Sie .valueOf (true) verwenden, wird ein Handle an das true-Objekt zurückgegeben, und wenn Sie .valueOf (false) verwenden, wird ein Handle für das false-Objekt zurückgegeben. Sie erstellen also keine unnötigen Objekte und müssen daher nicht vom Garbage Collector gelöscht werden.

Wenn Sie stattdessen "new Boolean ()" verwenden, funktioniert das nicht und Java erstellt jedes Mal ein neues Objekt. So haben Sie eine Menge unnötiger Objekte, die wahrscheinlich schnell freigegeben werden und vom Müllsammler gereinigt werden müssen. Dies kostet Ihnen mehr Speicher (für alle Objekte), Zeit für die Zuweisung (beim Erstellen neuer Boolescher Werte) und Zeit für die Freigabe (wenn die Objekte vom Garbage Collector erfasst werden), während Sie überhaupt keine Vorteile erhalten. p>     

Dakkaron 17.07.2014 07:24
quelle

Tags und Links