Wpis z mikrobloga

@wytrzzeszcz: Nic się nie zaoszczędzi a ten trik może tylko zaszkodzić wydajności. Jak iterujesz od 0 do N to kompilator wyłącza sprawdzanie czy przekroczyliśmy zakres tablicy (ponieważ jest to niemożliwe), jak masz nieskończoną pętlę to wtedy musi to sprawdzić za każdym razem co jest dużo gorsze.
@wytrzzeszcz:
Pomijacie najważniejsze, tworzenie wyjątku trwa... i to bardzo długo, szczególnie jak metoda jest "głęboko", więc kod spowolni, i to mocno :D
Sam nawet gdzieś tworzyłem własne Integer.parseInt, bo potrzebowałem czegoś do szybkiego wychwytywania poprawnych intów z ciągu wyrazów, a przez te wywalane exception kod był tak wolny że nie dało się go używać.
@3mortis: teoretycznie autorowi chodziło pewnie o to, że na poziomie assembly masz możliwość albo porównywania dwóch wartości, np.:
beq $t0, $t1
ale często (zawsze?) jest też osobny operator porównania z zerem i wtedy odczytujemy tylko jeden rejestr:
beqz $t0
(choć na pewno by trzeba sprawdzić, czy na każdym procesorze tak to zadziała).
bardzo wątpliwe, że akurat w przypadku Javy da nam to zysk zauważalny choćby na poziomie milisekundy, chyba, że mamy
@Eoghan: @3mortis: Jako ciekawostkę dodam że porównywanie w javie inta do 0 lub 1 też ma osobne bytecode, i mając też pole z intem i pole z booleanem, sprawdzenie if(bool) a if (int == 1) generuje takie samo bytecode. (szczególnie że na stosie boolean i tak jest traktowany jako 32 bitowa liczbowa.)
@Porana123: stack memory, to czego używa każda metoda itd.
int a = 5;
int b = 6;
int c = a + b;
wszystko ma tutaj 32 bity co dla każdego jest oczywiste, ale jak zmienimy wszystko na np "short", to dalej wszystko będzie miało 32 bity i instrukcje bytecode zostaną te same, co nawet widać po tym że java wywali błąd kompilacji pisząc że a + b zwraca int a