为什么在存在局部变量的情况下调用全局变量



给出下面显示的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;

相关内容

  • 没有找到相关文章