Modifier un tableau passé en tant que méthode de paramètre

Supposons que j'ai un int-tableau et je souhaite le modifier. Je sais que je ne peux pas attribuer un nouveau tableau à tableau passé en paramètre:

public static void main(String[] args)
{
    int[] temp_array = {1};
    method(temp_array);
    System.out.println(temp_array[0]); //prints 1
}
public static void method(int[] n)
{
    n = new int[]{2};
}

alors que je peux le modifier:

public static void main(String[] args)
{
    int[] temp_array = {1};
    method(temp_array);
    System.out.println(temp_array[0]); //prints 2
}
public static void method(int[] n)
{
    n[0] = 2;
}

Ensuite, j'ai essayé d'attribuer l'arbitraire d'un tableau pour le tableau passé en paramètre à l'aide de clone():

public static void main(String[] args)
{
    int[] temp_array = {1};
    method(temp_array);
    System.out.println(temp_array[0]); //prints 1 ?!
}
public static void method(int[] n)
{
    int[] temp = new int[]{2};
    n = temp.clone();
}

Maintenant, je me demande pourquoi il imprime à 1 dans le dernier exemple, alors que je suis juste de copier le tableau avec clone() qui c'est juste de la copie de la valeur de référence. Pourriez-vous expliquer que pour moi?


EDIT: Est-il un moyen de copier un tableau d'objet sans modifier la référence? Je veux faire le dernier exemple de l'impression 2.

OriginalL'auteur Eng.Fouad | 2011-08-20