2014-07-17 9 views

Odpowiedz

11

Powodem jest, że nowa wartość logiczna zawsze zwraca nowe wystąpienie. Ponieważ wystąpienia Boolean są niezmienne, nie ma sensu mieć więcej niż 2 wystąpienia. Jeden za fałszywy i jeden za prawdziwy.

Spróbuj, a zobaczysz

Boolean boolean1 = new Boolean("true"); 
Boolean boolean2 = new Boolean("true"); 
Boolean boolean3 = new Boolean("true"); 

System.out.println(System.identityHashCode(boolean1)); 
System.out.println(System.identityHashCode(boolean2)); 
System.out.println(System.identityHashCode(boolean3)); 

Boolean valueOf1 = Boolean.valueOf("true"); 
Boolean valueOf2 = Boolean.valueOf("true"); 

System.out.println(System.identityHashCode(valueOf1)); 
System.out.println(System.identityHashCode(valueOf2)); 
9

z dokumentacji, można przeczytać:

new Boolean(boolean value) 

alokuje Boolean obiekt reprezentujący wartość argumentu.

Uwaga: Rzadko należy używać tego konstruktora. O ile nie jest wymagana nowa instancja, statyczna wartość valueOf (boolean) jest ogólnie lepszym wyborem. Zapewnia znacznie lepszą wydajność w czasie i przestrzeni.

4

w Java Boolean (jak łańcuch) jest niezmienna. Oznacza to, że jeśli użyjesz wartości "x = false", wskażesz inny obiekt po "x = false" niż wcześniej. Więc jeśli użyjesz metody Boolean.valueOf(), Java zadba o to, aby były tylko dwa obiekty Boolean na max, jeden reprezentujący true, a drugi reprezentujący false. Jeśli użyjesz .valueOf (true), zwróci uchwyt do true-object i jeśli użyjesz .valueOf (false), zwróci uchwyt do false-object. W ten sposób nie tworzy się żadnych niepotrzebnych obiektów, a zatem nie będą one musiały być usuwane przez garbage collector.

Jeśli użyjesz "nowej Boolean()", to nie będzie działać, a Java będzie tworzyła za każdym razem nowy Obiekt. W ten sposób będziesz miał mnóstwo niepotrzebnych przedmiotów, które prawdopodobnie zostaną uwolnione dość szybko i będą musiały być oczyszczone przez garbage collector. Kosztuje to więcej pamięci (dla wszystkich obiektów), czas na przydzielenie (podczas tworzenia nowych wartości logicznych) i czas na dealokację (kiedy przedmioty są przechwytywane przez garbage collector), nie dając przy tym żadnych korzyści.

Powiązane problemy