Java 后增量运算符似乎不相关

Java 后增量运算符似乎不相关,java,Java,我试图理解为什么需要包含后增量运算符 在变量重新分配后的try块中,以使代码 编译它似乎不会增加变量的值。如有任何见解,将不胜感激 class Test{ public static int[ ] getArray() { return null; } public static void main( String[] args){ int index = 1; try{ getArray()[ index = 3]++; //t

我试图理解为什么需要包含后增量运算符 在变量重新分配后的try块中,以使代码 编译它似乎不会增加变量的值。如有任何见解,将不胜感激

class Test{
    public static int[ ] getArray() { return null; } 
public static void main( String[] args){
        int index = 1;
        try{
            getArray()[ index = 3]++; //the value of index is reassigned 
        }
        catch (Exception e){ } //catch isn't executed since no exception is thrown
        System.out.println(" index = " + index);
    }
}

这段代码只会导致NullPointerException,因为它试图访问getArray返回的null引用

另一方面,如果getArray方法将返回一个非空数组,则该表达式将把索引变量设置为3,然后在假定数组至少有4个元素的情况下增加数组中第4个元素的值,否则它将抛出一个异常


不过,将getArray返回的数组存储在变量中以保留对它的引用会更有意义。否则,操作这个数组就没有意义了,因为您将无法在getArray[index=3]++的末尾访问它;声明。

考虑一下环线的标准票价:

作为i+=1或i=i+1的简写符号,这很有用


在本例中,您是在getArray[index=3]处递增值,而不是在递增索引变量。考虑到它是空的,我怀疑这是否符合你的要求

很明显,您没有向我们展示代码的真正功能,让我们修复getArray以返回int[]而不是null-

然后我们调用它,获取一个数组,然后使用post增量,最后显示以[1,2,3,4,5]开头的数组-

输出是

[1, 2, 3, 5, 5]
 index = 3
因为后增量将索引3的值更改为第四个值,即4到5

我正在努力理解为什么它是必要的

首先,整个程序是不必要的。它没有做任何客观上有用的事情

您也可以说这是不必要的,因为在编写程序时,不会执行后期增量。嗯。。。也许我在这里付出的太多了。。。除了其他答案已经做到了这一点

但事实上,我认为这就是重点。这看起来像是一个测试您对Java表达式计算和异常语义理解的示例/问题。因此,增加员额的目的是转移注意力;i、 分散你对真实答案的注意力。这是它的必要性

后增量运算符似乎不相关


对。对于编写的代码,它是不相关的。但是,如果代码更现实一些,它也不会无关紧要。

catch不会被执行-啊。有趣的仍然不知道它为什么这么做。但我的假设是错误的。确实抛出了一个异常。谢谢对你说得对。这是一个练习考试的片段。试图理解作者的逻辑。但你的解释有道理。关键是要把我绊倒。谢谢。
public static int[] getArray() {
    return new int[] { 1, 2, 3, 4, 5 };
}
public static void main(String[] args) {
    int index = 1;
    int[] arr = getArray();
    arr[index = 3]++;
    System.out.println(Arrays.toString(arr));
    System.out.println(" index = " + index);
}
[1, 2, 3, 5, 5]
 index = 3