提供由下面显示的Java代码生成的EXACT输出。
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在setValues中设置为10(本地)并在第一行中引用。我知道全局z从call1设置为25,但是当执行第二次打印时,我认为它仍然会引用setValues'(local)z = 10,而不是全局z = 25。我看错了吗?
答案 0 :(得分:3)
[...] z在setValues [...] setValues'(本地)中设置为10(本地)z = 10 [...]
setValues
没有本地变量z
;每当它引用变量z
时,它指的是字段(“全局变量”)。
要使它有一个局部变量z
,这一行:
z=10;
将改为:
int z=10;