昨天遇到了这个奇怪的问题。在Java规范中似乎找不到以下逻辑解释...

public class Program {

    public static void main(String[] args) {
        int i = 0;

        try {
            bork(i++);
        } catch (Exception e) {
        }
        System.out.println(i);
    }

    private static void bork(int i) {
        throw new RuntimeException();
    }

}


有人会认为后增量不会发生,因为bork引发了异常,但是确实如此!

这种现象的解释是什么?

最佳答案

在调用方法i++之前,先调用bork()操作。
这就是为什么它仍然增加的原因。

所以:


i++被调用。
结果,它返回增量之前的i状态。
同时,i的实际状态会增加。所以i的值现在是1
bork(0)被调用。
引发异常。
处理异常(不执行任何操作)
打印i的当前状态,该状态等于1

07-24 21:46