Java,局部变量无任何理由增加其值

时间:2015-12-14 21:15:02

标签: java variables

我有一个小方法,应该计算目录的大小:

private static long getDirSize(File srcDir) {
    if (srcDir.isFile()) {
        sum += srcDir.length();
    } else {
        for (File curFile : srcDir.listFiles()) {
            getDirSize(curFile);
        }
    }
    return sum;
}

sum是一个类变量。

每当我的程序跳过if语句时,sum都会增加其值。我尝试在sum +=行设置断点,但即使sum的值增加,执行也永远不会停止。

如果我删除了sum +=行,那么sum永远不会改变,所以我确信这一行是sum增加的地方。

可能会发生什么?

1 个答案:

答案 0 :(得分:3)

也许另一个线程正在搞乱那个变量。通过一个非常简单的更改,您可以使这个线程安全,并恢复你的理智:

private static long getDirSize(File srcDir) {
    long sum = 0;
    if (srcDir.isFile()) {
        sum += srcDir.length();
    } else {
        for (File curFile : srcDir.listFiles()) {
            sum += getDirSize(curFile);
        }
    }
    return sum;
}