if中的调试器行为,else if,else

时间:2012-02-10 08:31:50

标签: java debugging if-statement

我们在Weblogic应用服务器11上运行Java 6应用程序。我正在尝试调试问题。我的代码是

if(a==0){
    //Do  A
}
else if(a==1){
    // Do B
}
else{
    // do C
}

我的问题是,即使我的if块为真且第2行仍然执行,调试器仍将转到else块中的第8行。 我的机器和服务器上的代码是同步的,所以没有不匹配。 请帮我查一下我的代码可能出错的地方。

3 个答案:

答案 0 :(得分:1)

我们需要知道// Do C

是什么

如果有分配:

if (a == 0) {
      b = 1;
} else  if (a == 1) {
      b = 0;
}
else {
      b = null;
}

一些编译器的典型优化是:

b = null;
if (a == 0) {
    b = 1;
} else if (a == 1) {
    b = 0;
}

这就是执行的字节码。如果代码是由JIT编译器编译为本机的话,更不用说了。 因此,根据您的调试客户端和jdk,您可以看到疯狂的当前指令行。但只要块的末尾的状态是预期的,它就没问题了。

有时执行需要关闭声明。所以它结束了。

确保没有为static分配a值,如果是,则重新编译。 static的赋值在编译时链接。

答案 1 :(得分:0)

不应该是:

if(a==0)
...
else if(a==1)
...
else
...

答案 2 :(得分:0)

不要忘记=是作业,==是比较 - 在​​您的情况下,您要分配值,然后检查作业的结果,而不是进行比较。

只需更改

if(a=0){
    //Do A
}
else if(a=1){
    // Do B

if(a==0){
    //Do A
}
else if(a==1){
    // Do B