变量的 Java 作用域和生存期



我编写了以下程序来显示 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);
    }
}
}

好吧,正如你所看到的,这不是它的工作原理:变量的作用域是声明它的块,包括任何子块。

修改

子块中的变量会针对其所有范围对其进行修改。每次启动新块时都不会创建变量的副本。

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

是的,内在if可以改变isprime

2.但是,一旦留下内部的"for"代码块{},这种更改就不会忘记吗?

No.It 不会被遗忘。

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

只有当您的第二个问题(第 2 个)被遗忘时,才会发生这种情况

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

最新更新