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.