Java passa sempre argomenti per valore NON per riferimento.
Mi spiego questo attraverso un example:
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");
}
}
farò spiegare questo in passi:
Dichiarare un riferimento di nome f
di tipo Foo
e assegnarlo a un nuovo oggetto del tipo Foo
con un attributo "f"
.
Foo f = new Foo("f");
Dal lato metodo, un riferimento di tipo Foo
con un nome a
viene dichiarato ed è inizialmente assegnato a null
.
public static void changeReference(Foo a)
Come si chiama il metodo changeReference
, il riferimento a
verrà assegnato all'oggetto che viene passato come argomento.
changeReference(f);
Dichiarazione un riferimento denominato b
di tipo Foo
e assegnare a un nuovo oggetto di tipo Foo
con un attributo "b"
.
Foo b = new Foo("b");
a = b
è riassegnazione riferimento a
NON f
all'oggetto cui l'attributo è "b"
.
Come si chiama modifyReference(Foo c)
metodo, viene creato un riferimento c
e assegna all'oggetto con attributo "f"
.
c.setAttribute("c");
cambierà l'attributo dell'oggetto che fanno riferimento c
punti ad esso, ed è allo stesso oggetto che fanno riferimento f
punti ad esso.
Spero che tu capisca ora come passare oggetti come argomenti lavora in Java :)
fonte
2012-02-22 23:11:57
Non c'è "pass per riferimento" lì. Passa per valore e il valore è un riferimento. Il codice B non viene compilato e, se lo fosse, non cambierebbe myFoo. – harold