0

この奇妙な振る舞いは、デバッグ中だけでなく、通常の実行中も見つかりました(少なくとも、アプリケーションの動作に基づいて想像します)。

次のコードを使用する場合(intを返す関数で):

try {
    return Integer.parseInt("3");
} catch (NumberFormatException ex) {
    System.out.println(ex.getMessage());
    return 0;
}

デバッグ中、'return Integer.parseInt( "3");'の後 デバッガーは「return0;」にジャンプします。それは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 に答える