我编写了以下程序来显示 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
中。