给出下面显示的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(本地),并在第一行中被引用。我知道call1中的全局z设置为25,但在执行第二次打印时,我认为它仍然会引用setValues的(local)z=10,而不是全局的z=25。我是不是看错了?
[…]z在setValues[…]setValues'(local)z=10[…]中设置为10(local
CCD_ 4不具有局部变量CCD_;每当它引用变量z
时,它都是指字段("全局变量")。
如果它有一个局部变量z
,这行:
z=10;
将改为:
int z=10;