Metody return, a przekazywanie przez wartość.

0

Witam, mam pytanie odnośnie zagadnienia przekazywania przez wartość w Javie. Nie wiem dokładnie kiedy możemy zmieniać wartość zmiennej/obiektu w metodzie, tak aby zmieniła się też wartość poza metodą. Czy do tego służą metody zwracające? Trochę na ten temat czytałem, ale nie za bardzo to kumam, i też inaczej te zjawiska są opisywane na różnych stronach/w książkach). Do tego dochodzi też zagadnienie parametrów metod, czy fakt, że metoda ma, bądź nie ma parametrów zmienia cokolwiek w możliwościach zmiany wartości wewnątrz metody? Byłbym wdzięczny gdyby ktoś mi pomógł zrozumieć to zagadnienie. Z góry dzięki za odpowiedź.

2

W java do funkcji przekazujesz kopie referencji która wskazuje na obiekt, jeżeli przekażesz obiekt A i będziesz zmieniał jego stan to tak na prawdę działasz na 1 obiekcie. Modyfikacja w funkcji modyfikuje go na zewnątrz. Jeżeli chcesz aby tak się nie działo musiałbyś klonować obiekt(płytkie/głębokie). To się tyczy tylko obiektów, do wartości prymitywnych takich jak int itp obowiązuje zasada ze co modyfikujesz w funkcji to nie ma wpływu na to co się dzieje na zewnątrz.

Jezeli w funkcji tworzysz obiekt na stercie to zwracasz tak na prawdę referencje do niego a nie sam obiekt;) Dlatego na zewnątrz wychodzi tylko adres gdzie za alokował się ten obiekt. I ten adres możesz przypisać do zmiennej referencyjnej.

1

Dla prymitywow nigdy.
Dla klas zawsze możesz zmienić stan obiektu ale nigdy nie możesz podmienić obiektu na inny. Każda zmiana stanu będzie widoczna na zewnątrz ale jeśli przypiszesz nowy obiekt to nie będzie to widoczne.

0

Ok, rozumiem, zawsze myliłe, myślałem że obiektów nie mogę zmienić, a typy proste tak. Ok, dzięki za odp. Ale co w takim razie z return? Nie ma na to wpływu? Jaka jest praktyczna strona metody zwracanej? jeśli nie chcemy niczego wypisać na konsoli itp, to czy jeśli zmodyfikujemy zmienną int c = 5; to czy metodą zwracaną nie możemy ją zmodyfikować i zwrócić z wartością inną niż 5 tak, aby zmienna na zewnątrz tez miała wartość inna niż 5?

1

Nie rozumiem pytania. Funkcja może coś zwrócić jako wynik swoich obliczeń i tyle. W praktyce jest to zawsze lepsze od zmieniania stanu obiektu wewnątrz funkcji bo jest bardziej czytelne. Jeśli przypisujesz wynik funkcji do zmiennej to przecież robisz to już "na zewnątrz" funkcji więc siłą rzeczy będzie tam widoczne.

0

ok, czyli krótko mówiąc nie da się przypisać wyniku obliczeń funkcji zwróconej przy pomocy return do zmiennej na zewnatrz funkcji?

1

No jak sie nie da jak sie wlasnie da - inaczej return nie mialby w ogole sensu....

0

? Oczywiście że się da! Jaki to by inaczej miało sens?

0

no właśnie o to pytałem wcześniej... czyli nie da sie bezposrednio zmienic z pozycji funkcji takiej zmiennej, ale poprzez return i pozniejsze przypisanie wyniku do zmiennej zewnetrznej juz tak. tak? ;)

0

Nawet jeśli język na to pozwala, dobrą praktyką jest zwracać wynik funkcji przez return, a nie przez argumenty.
Java na to nie pozwala, więc na szczęście masz ten problem z głowy.

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