In Java booleano (come String) è immutabile. Ciò significa che se si utilizza
Boolean x = new Boolean(true);
x = false;
x punterà a un oggetto diverso dopo "x = falso" rispetto a prima. Quindi, se si utilizza il metodo Boolean.valueOf(), Java si prenderà cura del fatto che ci sono solo due oggetti booleani al massimo, uno che rappresenta il vero e l'altro che rappresenta il falso. Se si utilizza .valueOf (true) verrà restituito un handle all'oggetto true e se si utilizza .valueOf (false) verrà restituito un handle all'oggetto falso. In questo modo non crei oggetti inutili e quindi non dovranno essere cancellati dal garbage collector.
Se si utilizza "new Boolean()", questo non funziona e Java creerà un nuovo oggetto ogni volta. Quindi avrai una tonnellata di oggetti inutili che probabilmente verranno liberati abbastanza rapidamente e che devono essere ripuliti dal garbage collector. Quindi questo ti costa più memoria (per tutti gli oggetti), tempo per l'allocazione (quando si creano nuovi booleani) e tempo per la deallocazione (quando gli oggetti vengono catturati dal garbage collector), senza dare alcun vantaggio.