2015-10-08 9 views
8

Ich sah in der Quelle der Boolean-Klasse der folgenden:Boolean.FALSE oder neu Boolean (false)?

public static final Boolean FALSE = new Boolean(false); 

Daher, wenn ich das richtig das Feld FALSE in der Boolean Klasse verstehe, bin ein Boolean selbst, das sein boolean Feld false gesetzt hat.

Jetzt frage ich mich, ob die folgenden zwei Aussagen wirklich gleichwertig sind.

Boolean myBool = new Boolean(false); 

und

Boolean myBool = Boolean.FALSE; 

Ich werde, dass ein neues im ersten Fall davon ausgehen, Boolean-Objekt aufgebaut ist, und die myBool Referenzpunkte, um es, während im zweiten Fall, dass wir tatsächlich eine Kopie der Referenz machen auf das Boolean.FALSE-Objekt - ist das korrekt?

Und wenn ja, was macht diesen Unterschied wirklich bedeuten?

Last but not least die aktuelle Frage: Welche der beiden Optionen sollte ich bevorzugen und warum?

+1

Sie sollten 'Boolean.FALSE' verwenden. Dies entspricht den zukünftigen Updates, die JDK möglicherweise hat. –

+1

Und auch 'Boolean.valueOf()' ist im Allgemeinen zu 'new Boolean()' vorzuziehen. – Keppil

+3

Weder.Verwenden Sie 'false' und lassen Sie den Compiler es über Autoboxing aussortieren. – EJP

Antwort

1

Sie sollten Boolean.FALSE verwenden, anstatt ein neues Objekt im Heap zu erstellen, da dies unnötig ist. Wir sollten dieses statische finale Objekt als Speicher verwenden und es ist sogar schneller, darauf zuzugreifen.

Und ja sind Sie richtig, dass:

erster Fall ein neues Boolean-Objekt aufgebaut ist, und die myBool Referenzpunkte, um es

Aber in zweitem Fall wir verweisen auf bestehendes Objekt einfach.

Und Ihre andere Frage, während wir Boolean.FALSE haben, warum wir die Option haben neue Boolean (falsch) der Grund ist, dass es ein Konstruktor ist. Angenommen, Sie haben eine einfache boolesche Variable x und wissen nicht, ob es wahr oder falsch ist und Sie ein entsprechendes boolesches Objekt wollen, dann wird dieser Konstruktor verwendet, um diese boolesche Grundvariable x an Boolean-Objekt zu übergeben.

+1

Würde nicht in diesem Fall Keppils Kommentar gelten und man sollte lieber Boolean.valueOf() verwenden? – dingalapadum

+1

Ja, es ist besser, Boolean.valueOf() über Konstruktor zu verwenden. – proudandhonour

+0

@ Keppil ok. dann als Follow-Up: Ich verstehe nicht, warum man jemals ein neues boolesches Objekt haben möchte, anstatt immer auf Boolean.FALSE (Boolean.TRUE) zeigen zu müssen. Von dem, was ich sehe, macht "valueOf" das auch. Also gibt es * irgendeinen * Anwendungsfall, in dem man wirklich ein neues boolesches Objekt erstellen würde? – dingalapadum

3

Der Unterschied:

Boolean.FALSE == Boolean.FALSE 

(boolean) true

new Boolean(false) == new Boolean(false) 

(boolean) falsch


Verwenden

Boolean myBool = false; 

und lassen Sie Autoboxing damit umgehen.