Почему глобальная переменная вызывается при наличии локальной переменной?

Дайте ТОЧНЫЙ вывод, сгенерированный кодом Java, показанным ниже.

int x=1, y=-5, z=4; // global variables
int vals[] = {-6,2,-4,-8 ,-2,-3}; // global variables

public void setValues()
{
  char y = 'R';
  z=10;
  System.out.println("l1: "+x+" "+y+" "+z);

  y=call1(x,y,z);
  System.out.println("l2: "+x+" "+y+" "+z);

  x=call2(x,vals);
  System.out.println("l3: "+x+" "+y+" "+z);

  for (int i=0; i<3; i++)
      System.out.println("l"+(i+4)+": "+vals[i*2]);
 }

public char call1(int a, char b, int c)
{
    if (a >= c) return b;
    else
    {  
     c=15;
     z=25;
     return 'M'; // note the single quotes
    }
}

public int call2(int x, int [] anArray)
{
  int y = 0;
  for (int i=anArray.length-1; i>=0; i--)
  {
      if (anArray[i] > x)
      {
        anArray[i] = x + 5;y++;}
      }
      x = 100;
  return y; 
}

Я предоставил вывод для первой строки, которая "l1: 1 R 10", Я обеспечил "l2: 1 M 10" для второй строки, но было сказано, что это "l2: 1 M 25", Мне сказали, что локальные переменные переопределяют глобальные (не рекомендуется использовать одно и то же имя). Тем не менее, z установлен на 10 (локально) в setValues ​​и указан в первой строке. Я знаю, что глобальный z установлен на 25 из call1, но при выполнении второй печати я подумал, что он все равно будет ссылаться на setValues ​​(локальный) z=10, а не на глобальный z=25. Я вижу это неправильно?

1 ответ

Решение

[…] Z установлен на 10 (локально) в setValues ​​[…] setValues ​​' (локально) z=10 […]

setValues не имеет локальной переменной z; всякий раз, когда это относится к переменной z, это относится к полю ("глобальная переменная").

Для этого иметь локальную переменную zэта строка:

  z=10;

будет изменен на это:

  int z=10;
Другие вопросы по тегам