我们在Weblogic应用服务器11上运行Java 6应用程序。我正在尝试调试问题。我的代码是
if(a==0){
//Do A
}
else if(a==1){
// Do B
}
else{
// do C
}
我的问题是,即使我的if块为真且第2行仍然执行,调试器仍将转到else块中的第8行。 我的机器和服务器上的代码是同步的,所以没有不匹配。 请帮我查一下我的代码可能出错的地方。
答案 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