我找到了以下java代码:
test:
for (int i = 0; i <= max; i++) {
int n = substring.length();
int j = i;
int k = 0;
while (n-- != 0) {
if (searchMe.charAt(j++) != substring.charAt(k++)) {
continue test;
}
}
foundIt = true;
break test;
}
System.out.println(foundIt ? "Found it" : "Didn't find it");
}
在循环内,上面的代码多次创建“n”、“j”和“k”。程序如何区分这些同名变量?
我的意思是它们存储在内存中的什么位置来区分它们?
最佳答案
稍微简化一下:
在 { ... }
block 内,int k = 0;
创建一个变量,并且该变量一直存在到您到达该 block 末尾的那一刻 block ,变量就被销毁了。因此,在程序运行期间的任何时刻,最多存在一个 n
、j
或 k
。
更接近现实:
编译器扫描整个方法,找到可能并行存在的变量列表(i
、n
、j
、 >k
和 foundIt
),并在堆栈上为这些变量分配足够的位置(示例中为 5 个位置)。这些堆栈位置从您进入方法的那一刻起一直存在,直到您从方法返回,但它们并不是一直使用,例如k
位置仅包含从执行 int k = 0;
到当前循环迭代结束的有用值。
关于java - 区分循环中同名的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54204776/