zmienne wewnątrz pętli czy przed pętlą - jak lepiej?

0

Zastanawiam się jak lepiej robić:

Pierwszy sposób - deklaracja zmiennej wewnątrz pętli - mniej kodu więc chyba lepszy:


for(int i = 0; i < 5; i++) {
                String x;
                //tutaj wykorzystanie zmiennej x
}

Drugi sposób - deklaracja zmiennej przed pętlą i inicjalizacja zmiennej nullem w pętli żeby nie pozostały w niej rzeczy z poprzedniej iteracji:


String x;
for(int i = 0; i < 5; i++) {
                x = null; 
                //tutaj wykorzystanie zmiennej x
}

Który sposób lepszy w javie?

1

Przy stringach raczej nie ma znaczenia, bo zawsze Java twoczy nowy obiekt.
Jednak, gdy korzystasz z typów prymitywnych int, itd
to lepiej definiować przed pętlą, jest to bardzo mały narzut ale powinno działać szybciej, bo co chwile nie jest tworzona nowa zmienna.

Jeśli się mylę, możecie mnie poprawić

3

Nullować powinno się najlepiej tuż po tym, jak zawartość przestaje być potrzeba. Inaczej śmieci mogą wisieć w pamięci albo nawet powodować wycieki.

Ja zawsze wkładam zmienne do jak najwęższego zakresu (scope - te klamrowe nawiasy ograniczają zakres). Po wyjściu za nawias klamrowy zmienne są usuwane, a śmieci mogą zostać zebrane, bo nie ma do nich referencji. Mniej kodu i mniejsza podatność na wycieki. Poza tym od razu widać, kiedy dana zmienna zaczyna/ przestaje być potrzebna - mega przydatne przy refaktoryzacji.

andrew007:
JVM optymalizuje sobie kod w locie i równie dobrze kod, który wydaje sie być szybszy może zostać skompilowany do mniej wydajnej postaci. Sugeruję nie wnikać w zbyt niskopoziomowe szczegóły podczas programowania w Javie. A jeśli już chcesz, to na x86 alokowanie pamięci na stosie to tylko i wyłącznie dodawanie/ odejmowanie wartości od wskaźnika stosu, czyli operacja praktycznie darmowa. Nie ma sensu zaciemniać kodu dla wątpliwych i niepewnych korzyści wydajnościowych.

1

Kompilator do bytecodu oraz pozniej jit czy inne i tak zrobia z tym co chca.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0