2016-08-17 2 views
0
  1. Может кто-то ответить на вопрос, почему вывод этого кода составляет 225? Почему бы не 222, так как вы меняете?
  2. Когда вы смотрите на код №2 a, когда a передан test(), он полностью изменился. Мой вопрос в том, почему «a» в номере 1 не изменилось при передаче в test(), в то время как «a» в номере 2 изменилось? Я начинаю на Java.

1.Confused with Array в Java

public class Array1 
{  
    static void test(int[] a) 
    { 
     int[] b = new int[2]; 
     a = b; 
     System.out.print(b.length); 
     System.out.print(a.length); 
    } 

    public static void main(String[] args) 
    {  
     int[] a = new int[5]; 
     test(a); 
     System.out.print(a.length); 
    } 
} 

2.

public class Array2 
{ 
    static void test(int[] a) { 
    int[] b = new int[2]; 
    for(int i =0; i< a.length; i++) 
    { 
     a[i]=1; 
    } 
} 

public static void main(String[] args) 
{ 
    int[] a = new int[5]; 
    test(a);  
    for(int i =0; i< a.length; i++) 
    {   
     System.out.print(a[i]);  
    } 
} 

ответ

0

Давайте посмотрим, что происходит шаг за шагом в случае 1

главная: int[] a = new int[5];: объявляет реф переменную в основном указав на массив из 5 целых чисел
основная: test(a); : Звонки тест со ссылкой на исходный массив
тест: static void test(int[] a) {: объявляет реф переменную a провести реф на массив вызывающего абонента =>a в тесте другой ссылка на исходный массив
тест: int[] b = new int[2];: объявляет реф переменная в тесте на новый массив 2 Интс
тест: a = b;: делает реф переменную a в контрольной точке в новый массив => исходный массив остается неизменным, как это a переменная в главном

остальные из выход теперь нормальный.

Теперь случай 2:

главные: int[] a = new int[5];: объявляет переменную реф в основных указывающем на массив из 5 целых чисел
главные: test(a); : Звонки тест со ссылкой на исходный массив
тест: static void test(int[] a) {: объявляет реф переменную a провести реф на массив вызывающего абонента =>a в тесте еще одна ссылка в исходном массиве
тест: int[] b = new int[2];: декларирует переменная ref в тесте для нового массива из 2 целых чисел
...
test: a[i] = 1;: as a - ссылка на исходный массив, вы меняете значения в исходном массиве.

вывод должен быть ясным.

0

В первом коде вы получаете 225:

следующие причины:

пусть адрес будет - aa111

пусть адрес Ъ - bb111

1) вы меняете адрес a в методе тестирования, поэтому в методе тестирования адрес станет bb111.

2) но вы не возвращаете a к основному методу, который он восстанавливает к исходному адресу aa111.

3) вы получите 222, если вы вернетесь из метода испытаний.

вот код для этого

public class Array1 
    {  
      static int[] test(int[] a) 
      { 
       int[] b = new int[2]; 
       a = b; 
       System.out.print(b.length); 
       System.out.print(a.length); 
       return a; 
      } 
      public static void main(String[] args) 
      {  
       int[] a = new int[5]; 
       a = test(a); 
       System.out.print(a.length); 
      } 
    }