2015-06-09 5 views
0

У меня есть простой код сценария:Передача массива методу

class Demo 
{ 
    static void check(int z[]) 
{ 
    z=null; 
} 

} 

class arrNullCheck 
{ 
    public static void main(String args[]) 
{ 
    int arr[]={2,3,4,5}; 

    Demo.check(arr); 

    for(int i=0;i<4;i++) 
    { 
     System.out.print(arr[i]); 

     }  
    } 
} 

По мне эта программа должна бросать исключения нулевого указателя во время выполнения, как г равно NULL, но выход следующим образом:

Output: 2 3 4 5 

Если я обновить метод как:

static void check(int z[]) 
{ 
    z[0]=9; 
} 

, то он будет обновлять массив со значением 9, как и ожидалось. почему здесь не работает нуль?

ответ

0

Нет, это не будет исключать. Java - это номер pass по значению, а ссылки также передаются по значению. Вы также не можете пересобирать ссылки. z является копию из ссылки на arr, и когда вы переназначить null в вашем методе, вы меняете значение локальной копии и не оригинальный arr.

+0

Затем, что касается элемента 'z [0]' в обновленном методе, он не должен обновлять 'arr'. – Avin

+1

Да, будет. 'z' указывает на то же, что указывает' arr'. Когда вы выполняете 'z [0] = 9', вы вообще не изменяете' z'. Вы изменяете значение в местоположении '0' в массиве, на который указывает' z'. –

Смежные вопросы