Dawno nie było niczego o Java'ie, bo mało piszę zawodowo (bycie managerem powoduje, że koduję głównie w Pythonie skrypty i sobie po godzinach robię zadania na LeetCode (do dziś mam nieprzerwany ciąg 191 dni i liczę, że nie przerwę...).
Wszyscy wiedzą, że w Java'ie w razie używania autoboxingu i ogólnie Integera wszystkie liczby od -128 do 127 są mapowane do trzymanych w cache instancji, w sensie, że każde użycie Integer.valueOf(1) zwróci zawsze tą samą instancję.
Stąd kod:
Integer x = 127;
Integer y = 127;
System.out.println(y==x);
Wypisz true, a standardowo kod:
Integer x = 128;
Integer y = 128;
System.out.println(y==x);
Wypisze false.
Ale jak się ten kod uruchomi z parametrem '-Djava.lang.Integer.IntegerCache.high=1000 to już wypisze true ;-)
Co ciekawe można podnieść ten górny zakres cache, ale nie da się zmienić tego dolnego :-)
Drugie co ciekawe jest takie, że jak się ustawi to high na wartość mniejszą niż 127 to i tak liczby od -128 do 127 będą zcachowane ;-)
Oczywiście najlepiej pisząc kod w Java'ie nie mieszać tak swobodnie wrapperów jak Integer z prymitywami. Bo to zawsze może zaboleć.
Podobne postybeta
Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)
Ile to jest 1+1 w Java'ie?
Człowiek się uczy całe życie - źle rozumiałem cache'owanie Integerów :-)
var bywa niebezpieczne :-)
Autoboxing/Unboxing nie lubi sie z var - nadal ;-)
Brak komentarzy:
Prześlij komentarz