Odpowiedź prawidłowa należy do swietego, choć nie do końca. W przedstawionych przypadkach można by sądzić, że zadziała wbudowany mechanizm „flyweight”. Nic bardziej mylnego.
Java, a w zasadzie JVM posiada mechanizm współdzielenia obiektów niektórych klas w ramach całej instancji maszyny. Oznacza to, że ten sam obiekt jest dostępny z każdego programu działającego w ramach danej maszyny wirtualnej.
Istnieje jednak mechanizm, który pozwala na tworzenie obiektu wyłączonego z pod jurysdykcji maszyny. Jest to stworzenie nowego obiektu za pomocą operatora new. new String(„coś”) Tworzy tak naprawdę dwa obiekty coś. Jeden będzie utrzymywany jako super instancja w całym JVM, a drugi pochodzi od new.
W podanym przeze mnie przykładzie w obu przypadkach tworzone są nowe, niezależne obiekty. Nie ma możliwość zatem, by mechanizm synchronizacji działał tak jak w pierwszej chwili sądzimy. Działa to w tym przypadku niezależnie od autoboxingu.