Java inicjalizacja zmiennych w for.

0

Witam,
Mam pytanie jaka jest różnica(poza tym, że pracownik bedzie dostępny poza for w pierwszym przypadku) albo jaki kod jest bardziej poprawny. Czy może oba zapisy są poprawne. ?

Klasa pracownik;
for(int i = 0; i <=100; i++)
{ 
   pracownik = new Klasa();

}

czy tak

for(int i = 0; i <=100; i++)
{ 
Klasa  pracownik = new Klasa();

}
0

W takiej wersji jak ta oba są niepoprawne. Mógłbyś napisać ten kod jakoś bardziej przejrzyście ?

0

Oba zapisy są poprawne.

1

Formalnie oba zapisy są poprawne. Różnią się efektem, o czym wspomniałeś, pisząc o widoczności zmiennych. Pytanie o wydajność? Cóż trzeba to samodzielnie sprawdzić. Jeśli chodzi o poprawność z punktu widzenia zasad pisania kodu, to należy pamiętać, że zmienne deklarujemy jak najbliżej miejsca ich użycia. Zatem jeżeli nie chcesz korzystać ze zmiennej poza pętlą, to drugie podejście będzie lepsze.

1

pierwszy jest nie ok bo niepotrzebnie powieksza zakres zmiennej i przez co mozesz jej blednie uzyc juz za petla for.

0

@katelx, szukamy czegoś w pętli i jak znajdziemy to przypisujemy do zmiennej. Nadal nie jest ok, bo mamy zapewne dwie odpowiedzialności w ramach metody, ale to nie jest duży błąd.

0

nie no, nie twierdze ze to jakis straszny babol, ale zwykle jest to niepotrzebne i/lub ladnie wspolgra z innymi niedociagnieciami

0

W niższych językach sprawa jest prosta - wtedy inicjalizowana jest zmienna 100 razy (to samo by było gdyby tutaj był jakiś prymityw, a nie referencja).

Tak czy inaczej:
Z poziomu maszynki JVM nie ma tutaj różnicy, czyli te zapisy różnią się jedynie zasięgiem zmiennych.

0

mozesz rozwinac?

  1. jakie nizsze jezyki masz na mysli? :) bo jedynie c++ mi przychodzi do glowy. i co w tym nizszego skoro konstrukcja jest ta sama? roznica jest jedynie w obecnosci/braku automatycznego GC
  2. zmienna jest inicjalizowana 100 razy...
  3. z poziomu JVM jest to istotne.
0

Z punktu widzenia wykonania kodu nie widzę za bardzo różnicy. W obu przypadkach ta zmienna będzie na stosie i zostanie zainicjowana raz przy wejściu do metody, zapewne razem z innymi zmiennymi lokalnymi (jeśli są) jedną instrukcją. Kompilatory nie są głupie. W sumie to jest jedna z podstawowych automatycznych optymalizacji - wywalić jak najwięcej się da poza pętlę.

Do tego jeśli obiektu przypisanego do tej zmiennej używasz tylko lokalnie, to w nowych Javach możesz być niemal pewnym, że taki obiekt też wyląduje na stosie, i że miejsce pod niego zostanie zaalokowane raz przy wejściu do metody.

0

z poziomu JVM jest to istotne.

Dlaczego? Generowany bytecode jest dokładnie taki sam, no może z wyłączeniem lokacji tych zmiennych.

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