Cześć. Mam pytanie odnośnie tego, że Java jest przekzywana przez wartość.
Mam dwa przzykłady z SO:
public class Main{
public static void main(String[] args){
Foo f = new Foo("f");
changeReference(f); // It won't change the reference!
modifyReference(f); // It will modify the object that the reference variable "f" refers to!
}
public static void changeReference(Foo a){
Foo b = new Foo("b");
a = b;
}
public static void modifyReference(Foo c){
c.setAttribute("c");
}
}
Tutaj wszystko rozumiem w changeReference tworzymy nową referencję, dlatego nie działamy na tym samym adresie.
Ten obrazek to pokazuje:
I mam drugi kod:
private void foo(Object bar) {
bar = null;
}
public static void main(String[] args) {
String baz = "Hah!";
foo(baz);
System.out.println(baz);
}
W metodzie foo nie tworzymy żadnych nowych instancji, dlatego dlaczego nie wypiszę się null tylko Hah?
Czy to nie jest taka sama metoda jak modifyReference z 1 przykładu?