Istnieje wiele dyskusji w stackoverflow dotyczących przekazywania wartości i przekazywania przez odniesienie. Ale chcę wiedzieć, co dzieje się w następującym scenariuszu? Ta strona mówi, że java jest przekazywana według wartości. Is Java "pass-by-reference" or "pass-by-value"?.Jawne przekazywanie list metodom działającym jak przekazywanie przez odniesienie
W przypadku następującego kodu, element jest usuwany z metody removeElement, usuwa piątego elementu z listy po wydrukowaniu listy.
public class Load {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.addAll(Arrays.asList(1,1,2,3,5,5,13,21));
removeElement(list);
System.out.println(list);
}
public static void removeElement(List<Integer> list){
list.remove(5);//removes element at index 5
}
}
Dane wyjściowe programu to [1, 1, 2, 3, 5, 13, 21]
.
Czy ktoś może wyjaśnić, jak to jest przekazywać wartość, a nie przekazywać przez odniesienie?
To niemożliwe, to nie jest dupe. –
Faktycznie, stwierdzenie, że Java jest "wartością przekazywaną", jest niepotrzebnie mylące i wymaga skręcania normalnego znaczenia słów angielskich. Java ma dwa typy wartości: typy podstawowe i typy odniesienia (obiekty i tablice). W przypadku typów pierwotnych wartość jest przekazywana. W przypadku typów odniesienia odniesienie jest przekazywane. Niektórzy ludzie lubią dodawać, że ten odnośnik jest przekazywany "według wartości", ale to nic nie dodaje nikomu do zrozumienia tematu. Ponieważ referencja jest przekazywana dla typów odniesienia, zobaczysz modyfikacje, które wprowadziłeś do obiektu w wywołującym metodę. –