Znów miałem problem z autoboxingiem i znowu przez var ;-)
Aż zaczynam się zastanawiać czy tak go bardzo używać jak go używam....
Rozwiązywałem zadanie na LeetCode i miałem taki mniej więcej kod:
private PriorityQueue<Integer> pq;
[...]
var val = pq.poll();
while (!pq.isEmpty() && val==pq.peek()) pq.poll();
Oczywiście ja byłem święcie przekonany, że tu był unboxing i gdybym nie użył val, a
int val = pq.poll();
wszystko by działało.
Bez tego program przestawał działać dla większych przykładów, naprawiłem go przy pomocy zmiany linii z while na:
while (!pq.isEmpty() && val>=pq.peek()) pq.poll();
(czyli zamiana == na >=) i nie mogłem zrozumieć czemu teraz działa.... dopiero po jakimś czasie do mnie dotarło, że działa bo >= nie jest możliwy dla obiektów, więc Java musiała zrobić unboxing....
Po tym już umiałem poprawić swój program tak by działał prawidłowo ;-)
Podobne postybeta
var bywa niebezpieczne :-)
Nieoczywiste oczywistości ;-) podstępny autoboxing ;-)
Człowiek się uczy całe życie - źle rozumiałem cache'owanie Integerów :-)
Który kod (nie kot! ;-)) lepszy?
Ile to jest 1+1 w Java'ie?
Brak komentarzy:
Prześlij komentarz