modyfikacja argumentow funkcji

0

Chciałbym się dowiedzieć jak modyfikować argumenty funkcji w funkcji którą je przyjmuje.
W c++ wystarczyło dać referencje do zmiennej i już po problemie. W javie jako, że ich nie ma nie wiem jak rozwiązać problem.

przykład:

public static void f(int a)
{
a++;
}

public static void main(String[] args)
{
int a = 0;
f(a);
System.out.print(a);
}

To oczywiście wypisze 0. Jak ma wyglądać funkcja f żeby wypisywało 1?

0

Musisz stworzyć obiekt z polem typu int i przekazać referencję do tego obiektu. W Javie nie da się przekazywać referencji do prymitywów, nie można też zmieniać (ani nawet odczytywać) wartości zmiennych w innej ramce stosu niż aktualna.

A więc, podsumowując, zrób np klasę Holder:

class Holder<T> {
  private T value;
  // gettery, settery, konstruktory
}

I wtedy możesz stworzyć klasę Holder<Integer>. Ewentualnie zrób klasę:

class IntHolder {
  private int value;
  // getttery, settery, konstruktory
}

To będzie miało mniejszy narzut w ogólności.

W przypadku obiektów wykorzystywanych lokalnie, JVM odpali swoje optymalizacje jak np usuwanie autoboxingu, dewirtualizację, Escape Analysis, itp itd i nie powinno być wtedy różnic w wydajności pomiędzy Holder<Integer> i IntHolder.

0

A nie możesz zwracać zmodyfikowanej wartości?

public static int f(int a)
{
    a++;
    return a;
}

public static void main(String[] args)
{
    int a = 0;
    a = f(a);
    System.out.print(a);
}
0

TO się w tym przypadku mija z celem bo w C++ za pomocą jednej funkcji możesz zmienić wartość wszystkim parametrom a przypisanie jest dość rozległe w porównaniu do wywołania samej funkcji ^^.

0

W c++ wystarczyło dać referencje do zmiennej i już po problemie.
To powoduje wiele problemów :)

0

Java jest obiektowa. Jeśli potrzebujesz funkcji, która zmienia wiele parametrów, to są one chyba powiązane. Tworzysz zatem klasę, w której te parametry są polami, tworzysz obiekt, a do funkcji przekazujesz referencję do obiektu.

0
Urso_niezalogowany napisał(a):

Chciałbym się dowiedzieć jak modyfikować argumenty funkcji w funkcji którą je przyjmuje.
To jest Java, nie C++. W Java nie ma referencji do prymitywów i nie powinieneś takich referencji symulować.

Jak rozwiązać problem? No właśnie, jaki problem? Bo na razie konkretnego problemu nie przedstawiłeś. Powiedziałeś tylko, że w C++ z tym problemem poraziłbyś sobie referencjami.

0

Referencje są, ale tylko do obiektów.

Edit:
No właśnie : P

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