Почему глобальная переменная вызывается при наличии локальной переменной?
Дайте ТОЧНЫЙ вывод, сгенерированный кодом 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;