Если вы когда-либо использовали C или C++ и знать о том, как указатели работы, то, что сделало весь этот клещ сценарий для меня является следующее утверждение:
In Java, everything is passed by value.
In case of Objects, the reference (pointer) is passed by value.
Так в основном функция своп
public void swap(int[] a, int[] b)
{
etc.
}
Будет просто получить указатель на массив int [] a
и указатель на массив int [] b
. Вы просто меняете два указателя. Вы не можете изменять содержимое указателей, подобных этому.
В основном C эквивалент
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);
}
Хотя даже в C, это будет работать только как так:
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);
}
Конечно, вы не можете отправить ссылку на ссылки в Java , Указатели в этом смысле не существуют на Java.
Следовательно, для фактического изменения объекта в другой функции вам понадобится объект «Держатель», к которому копируется ссылка, но ссылка внутри него на объект, который вы хотите изменить, на самом деле является фактической ссылкой объект, если это имело смысл.
И, таким образом, следующий будет работать:
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);
}
Вам нужно понять ссылки. –
Возможный дубликат [Является ли Java «сквозной ссылкой» или «передачей по значению»?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass -by-value) – vaxquis
Java передает ** ссылки ** по значению. –