Измените массив, переданный как параметр метода

Предположим, у меня есть массив int, и я хочу его изменить. Я знаю, что я не могу назначить новый массив массиву, переданному как параметр:

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};
}

, в то время как я могу его изменить:

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;
}

Затем я попытался назначить произвольный массив массиву, переданному как параметр, используя 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();
}

Теперь мне интересно, почему он печатает 1 в последнем примере, когда я просто копирую массив с помощью clone () , который просто копирует значение, а не ссылку. Не могли бы вы объяснить мне это?


РЕДАКТИРОВАТЬ: Есть ли способ скопировать массив в объект без изменения ссылки? Я хочу сделать последний пример печати 2 .

6
задан Eng.Fouad 20 August 2011 в 03:25
поделиться