小编And*_*sha的帖子

为什么在检查数组引用表达式是否为null之前先评估Java数组索引表达式?

根据JLS,对数组访问表达式的运行时评估的行为如下:

  1. 首先,对数组引用表达式进行求值。如果此评估突然完成,则出于相同原因,数组访问将突然完成,并且不评估索引表达式。
  2. 否则,将评估索引表达式。如果此评估突然完成,则出于相同原因,阵列访问也会突然完成。
  3. 否则,如果数组引用表达式的值为null,则将引发NullPointerException。

因此,此代码将打印:java.lang.NullPointerException,index = 2

class Test3 {
    public static void main(String[] args) {
        int index = 1;
        try {
            nada()[index = 2]++;
        } catch (Exception e) {
            System.out.println(e + ", index=" + index);
        }
    }

    static int[] nada() {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:出于什么原因,我们需要首先对index = 2表达式求值,而不是在数组引用被评估为null时立即抛出NullPointerException?或者换句话说-为什么1,2,3而不是1,3,2?

java language-lawyer

38
推荐指数
4
解决办法
1924
查看次数

标签 统计

java ×1

language-lawyer ×1