Wenn Sie jemals C oder C verwendet habe ++ und wissen, wie Zeiger funktionieren dann, was für mich dieses ganze Szenario tick gemacht ist die folgende Erklärung ab:
In Java, everything is passed by value.
In case of Objects, the reference (pointer) is passed by value.
Also im Grunde die Swap-Funktion von
public void swap(int[] a, int[] b)
{
etc.
}
Wird nur den Zeiger auf die a
int [] -Array und den Zeiger auf die b
int [] -Array bekommen. Sie tauschen nur zwei Zeiger aus. Sie können den Inhalt von Zeigern nicht ändern.
Grundsätzlich ist die C entspricht
void swap(int* a, int* b)
{
int* temp = a;
a = b;
b = temp;
}
int main(void)
{
int a[] = {5,6,7,8};
int b[] = {1,2,3,4};
swap(a,b);
}
Während auch in C, das nur etwa so funktionieren würde:
void swap(int** a, int** b)
{
int* temp = (*a);
(*a) = (*b);
(*b) = temp;
}
int main(void)
{
int a[] = {5,6,7,8};
int b[] = {1,2,3,4};
swap(&a, &b);
}
Natürlich können Sie nicht die Referenz eines Verweises in Java senden . Zeiger in diesem Sinne gibt es in Java nicht.
Um das Objekt in einer anderen Funktion tatsächlich zu ändern, benötigen Sie daher ein "Holder" -Objekt, auf das die Referenz kopiert wird, aber die darin enthaltene Referenz zu dem Objekt, das Sie ändern möchten, ist tatsächlich die tatsächliche Referenz von das Objekt, wenn das Sinn machte.
Und so würde die folgende Arbeiten:
public class ArrayHolder
{
public int[] array;
public ArrayHolder(int[] array)
{
this.array = array;
}
}
public void swap(ArrayHolder a, ArrayHolder b)
{
int[] temp = a.array;
a.array = b.array;
b.array = temp;
}
public static void main(String[] args)
{
ArrayHolder aaa = new ArrayHolder(new int[] {5,6,7,8});
ArrayHolder bbb = new ArrayHolder(new int[] {1,2,3,4});
swap(aaa,bbb);
}
Sie müssen Referenzen verstehen. –
mögliches Duplikat von [Ist Java "pass-by-reference" oder "pass-by-value"?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass -by-value) – vaxquis
Java übergibt ** Referenzen ** nach Wert. –