wtorek, października 26, 2021

var bywa niebezpieczne :-)

Robię sobie zadania na LeetCode i odkrywam, że choć var mi bardzo życie ułatwia to też i utrudnia ;-)

Głównie gdy operuję kolekcjami i trzymam w nich rzeczy ws tylu Integer'ów ;-)

Często i gęsto mam w kodzie coś takiego:

        void remove() {
var val = q.pollFirst();
if (maxes.peek()==val) maxes.pollFirst();
}
(co jest fragmentem impelmetnacji kolejki z max)

I niby wszystko jest fajnie... ale przez to var i == są problemy.
Gdyby kod był:
        void remove() {
int val = q.pollFirst();
if (maxes.peek()==val) maxes.pollFirst();
}
To w linii z q.pollFirst() doszłoby do autounboxing'u i w kolejnej linii porównywałbym int'y, a tak jak jest var to do val wędruje Integer i w kolejnej linii == porównuje instancje obiektów...

Co najgorsze, przez to, że to Integer to to będzie działać dla wielu przypadków ;-) (w większości JVMek dla -128 do 127 ;-)) 

Już się drugi raz tak zrobiłem w ciągu ostatnich 2 dni....



Podobne postybeta
Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)
Potworność ;-) czyli mnożenie w 90 liniach ;-)
Człowiek się uczy całe życie - źle rozumiałem cache'owanie Integerów :-)
Bug w debugu ;-)
Ile to jest 1+1 w Java'ie?

Brak komentarzy:

Prześlij komentarz