我发现这种奇怪的行为不仅在调试时,而且在正常执行期间(至少我是这么想的,基于应用程序的行为)。
如果我使用以下代码(在返回int的函数中):
try {
return Integer.parseInt("3");
} catch (NumberFormatException ex) {
System.out.println(ex.getMessage());
return 0;
}
在调试期间,'return Integer.parseInt(“3”);'调试器跳转到'return 0;'。它似乎进入了catch块,但跳过了System.out行,甚至没有将“ex”显示为现有变量。然后该函数返回0。
但如果我用以下内容替换上述内容:
int x;
try {
x = Integer.parseInt("3");
} catch (NumberFormatException ex) {
System.out.println(ex.getMessage());
x = 0;
}
return x;
然后一切都像我期望的那样:x得到值3,函数返回3。
为了我的利益,我无法弄清楚为什么会这样。你有什么想法吗?
答案 0 :(得分:1)
不确定为什么要这样做,但作为另一种建议:
int returnValue = 0; // set returnValue to error as default
try {
returnValue = Integer.parseInt("3");
} catch (NumberFormatException ex) {
System.out.println(ex.getMessage());
}
return returnValue;
答案 1 :(得分:0)
您是否查看了返回的实际值?有时调试器(由于应用了优化)将跳转到返回位置,该位置似乎设置了不适当的值,但实际上返回值已经正确建立。
嗯,是的。我在这里张贴这个是为了清楚它是答案。