Robię kilka eksperymentów z listą Java. Prześlij parametr listy do prostej metody, która dodać dwa struny na nową listę. W finale przypisałem listę parametrów lista utworzona w metodzie.

Oczekuje się, że miałem następujący wynik:

[a, b] ale otrzymuję [c, d]

Mam ten kod:

public class A {

public static void f(List<String> list){
    List<String> list2 = new ArrayList<>();

    list2.add("a");
    list2.add("b");

    list = list2;
}

public static void main(String[] args) {

    List<String> list = new ArrayList<>();

    list.add("c");
    list.add("d");

    f(list);
    System.out.println(list);
  }
}

Czy ktoś może mi wyjaśnić, co dzieje się w tle?

-5
pcCC28 4 czerwiec 2018, 21:33

2 odpowiedzi

Najlepsza odpowiedź

Java Przypisz parametry metody "według wartości" (w przeciwieństwie do "przez odniesienie" i "przez wskaźnik").

Kiedy zadzwonisz

void f(List<String> list)

Prześlij wskaźnik do listy. Wskaźnik do listy jest skopiowany do innej zmiennej i przypisania

list = list2 

Przypisz "List2" do oddzielnej kopii wskaźnika. Oznacza, że przez to zadanie oryginalny wskaźnik pozostaje niezmieniony.

0
Oz Molaim 4 czerwiec 2018, 18:49

Nie nazywałeś F (listy) w swoim głównym (), a nawet jeśli zadzwonisz, a także otrzymasz [C, D], jak nie zmieniasz przejściowej listy. Właśnie zmienisz listę lokalnych listów w F ()

0
ankm 4 czerwiec 2018, 18:43