0

我不仅在调试时发现了这种奇怪的行为,而且在正常执行期间也发现了这种奇怪的行为(至少我是这样认为的,基于应用程序的行为方式)。

如果我使用以下代码(在返回 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。

为了我的利益,我无法弄清楚为什么会发生这种情况。你有什么主意吗?

4

2 回答 2

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;
于 2012-06-17T12:34:00.133 回答
0

麻 说道:

您是否查看过返回的实际值?有时调试器(由于应用了优化)会跳转到一个返回位置,该位置似乎设置了一个不合适的值,但实际上返回值已经正确建立。

嗯是对的。我在这里发布这个是为了明确这是答案。

于 2012-11-17T16:24:23.400 回答