调试期间的不同结果和 Java 中的 运行

Different result during Debug and Run in Java

我写了这么一小段代码来测试短路运算符

package com.MasterChief;

public class ShortCircuitDebugTest {
    static boolean myBool = true;
    static int myInt = 1;
    public static void main(String[] args) {
        if (myBool || myFunc()){ // line 7: put break point here
            System.out.println("myInt = " + myInt);
        }
    }

    private static boolean myFunc(){
        myInt = 5;
        return !myBool;
    }
}

我在第 7 行放置了一个断点,并在 Expressions window 中添加了 myFunc。在调试期间 Expressions window 应该是可见的。结果是:

myInt = 5

如果我只是运行程序或不在Expressions中添加myFunc window或不添加select 表达式 window,我不明白这种行为。
这是 Eclipse 中的预期行为还是错误?

如果将表达式添加到表达式Window,它将执行并更改全局变量myBoolmyInt的值。如果您转到下一步,它将执行第二次,因此您的代码将为您提供其他结果。

这不是错误。由于 || 运算符从左到右评估表达式,因此您的 myBool 检查将 return 为真,而 myFunc() 将不会被调用(因为整个条件将始终为真,所以没有需要评估 myFunc() 结果)。

由于您在调试表达式 window 中使用了 myFunc(),它仍然会被计算以显示结果并将 myInt 更改为 5