java - 区分循环中同名的局部变量

标签 java

我找到了以下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 ,变量就被销毁了。因此,在程序运行期间的任何时刻,最多存在一个 njk

更接近现实:

编译器扫描整个方法,找到可能并行存在的变量列表(inj >kfoundIt),并在堆栈上为这些变量分配足够的位置(示例中为 5 个位置)。这些堆栈位置从您进入方法的那一刻起一直存在,直到您从方法返回,但它们并不是一直使用,例如k 位置仅包含从执行 int k = 0; 到当前循环迭代结束的有用值。

关于java - 区分循环中同名的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54204776/

相关文章:

Java - 欧几里得算法的递归函数

java - 将图像从java服务器发送到android

java - 如何在Eclipse中自定义 'new'选项

java - 对 URL 进行编码后出现 URISyntax 异常

java - 嵌套 json 到 java 对象 List<Object> 返回预期值,但 List<DefinedObject> 返回 null 值

java - Selenium : Not able to click on WebElement

java - Android 中的 R.java 类

java - 多个 QueueConnectionFactory 上的异常

java - jackson 自定义号码解析

java - 明确设置 apache HttpClient 日志级别