Java范围和变量的生命周期

时间:2014-11-16 07:31:59

标签: java scope lifetime

我编写了以下程序来显示2到50(含)之间的所有素数。该程序按预期运行,但当我重新检查代码时,我想知道它为什么没有失败。 if语句可以更改isprime变量的值。但是,一旦内部for代码块{}被遗忘,这一变化是否会被遗忘?这意味着isprime将保留true,并且会显示所有数字。

class Prime {
    public static void main (String args []) {

    int a, b;
    boolean isprime;

    for (a = 2; a < 51; a++) {

        isprime = true;

        for (b = a-1; b > 1; b--) {

            if (a % b == 0) isprime = false;
        }

        if (isprime) System.out.println(a);
    }
}
}

2 个答案:

答案 0 :(得分:2)

嗯,如你所见,它不是如何工作的:变量的范围是声明它的块,包括任何子块。

修改子块中的变量会修改它的所有范围。每次新块开始时都不会生成变量的副本。

答案 1 :(得分:1)

  

1.'if'语句可以改变'isprime'变量的值

是的。内部if可以更改isprime

  

2.但是,一旦内部'for'代码块{}被遗忘,这个改变是否会被遗忘?

不,不会忘记。

  

3.这意味着isprime将保持为真,并显示所有数字。

只有忘记了第二个问题(第2个问题)时才会发生这种情况

想一想。全局变量可以通过任何方法改变,因为它的范围是整个程序。这个变量可以通过任何方法改变。同样,isprime可以main更改main,因为它在main中声明,其范围在{{1}}。

相关问题