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

时间:2015-01-12 11:19:19

标签: java eclipse debugging short-circuiting

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

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 窗口中添加了 myFunc 。在调试期间,表达式窗口应该是可见的。结果是:

myInt = 5

如果我只是运行程序或者不在 Expressions 窗口中添加 myFunc ,或者不选择 Expressions 窗口,我就不会这样做行为。
这是预期的行为还是Eclipse中的错误?

2 个答案:

答案 0 :(得分:4)

如果将表达式添加到表达式Window,它将执行并更改全局变量myBoolmyInt的值。如果你进入下一步,它将再次执行,所以你的代码会给你另一个结果。

答案 1 :(得分:1)

这不是错误。由于||运算符从左到右计算表达式,因此myBool检查将返回true并且myFunc()将不会被调用(因为整个条件始终为true,因此无需评估{ {1}}结果)。

由于您在调试表达式窗口中使用myFunc(),因此将对其进行评估,以便向您显示结果,并将myFunc()更改为myInt