调试期间的不同结果和 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,它将执行并更改全局变量myBool
和myInt
的值。如果您转到下一步,它将执行第二次,因此您的代码将为您提供其他结果。
这不是错误。由于 ||
运算符从左到右评估表达式,因此您的 myBool
检查将 return 为真,而 myFunc()
将不会被调用(因为整个条件将始终为真,所以没有需要评估 myFunc()
结果)。
由于您在调试表达式 window 中使用了 myFunc()
,它仍然会被计算以显示结果并将 myInt
更改为 5
。
我写了这么一小段代码来测试短路运算符
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,它将执行并更改全局变量myBool
和myInt
的值。如果您转到下一步,它将执行第二次,因此您的代码将为您提供其他结果。
这不是错误。由于 ||
运算符从左到右评估表达式,因此您的 myBool
检查将 return 为真,而 myFunc()
将不会被调用(因为整个条件将始终为真,所以没有需要评估 myFunc()
结果)。
由于您在调试表达式 window 中使用了 myFunc()
,它仍然会被计算以显示结果并将 myInt
更改为 5
。