marcin1991 napisał(a)
Witam! Oto mój program:
public class Main {
public static void main(String[] args){
int i = 5;
Integer I = new Integer(i);
Test.rob(i);
Test.rob(I);
System.out.println(I);
System.out.println(i);
}
}
class Test{
public static void rob(Integer K){
K = 44;
}
public static void rob(int k){
k = 44;
}
}
W wyniku wyświetla się:
5
5
Skoro I jest obiektem i przekazuję je przez "referencje" do funkcji rob to dlaczego wynik nie jest:
44
5
Z góry dziękuję za pomoc.
W java istnieje tylko przekazywanie przez wartosc. W momencie kiedy wywolujesz metode:
Test.rob(I);
tworzona jest KOPIA referencji I do obiektu Integer. Nadal pracujesz na tym samym obiekcie ale przez inna referencje. Dlatego jesli twoja metoda wyglada tak:
public static void rob(Integer K){
K = 44;
}
to liczbe 44 przypisujesz do KOPI referencji ktora otrzymales jako argument. Po wykonaniu tej metody zmienna I w main() nadal wskazuje na Integer z wartoscia 5 a zmienna K wskazuje na obiekt Integer (dzieki autoboxingowi) o wartosci 44. Poniewaz nie zwracasz referencji K obiekt na ktory wskazuje zostanie w przyszlosci usuniety przez GC.