后增量算子似乎无关紧要

时间:2014-09-08 22:29:22

标签: java

我试图理解为什么必须包含后增量运算符 在变量重新分配后的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);
    }
}

4 个答案:

答案 0 :(得分:4)

此代码只会导致NullPointerException,因为它试图访问getArray()返回的空引用。

另一方面,如果getArray()方法将返回非空数组,则此表达式会将index变量设置为3,然后递增数组中第4个元素的值(假设数组中至少有4个元素 - 否则会抛出异常)。

然而,将getArray()返回的数组存储在变量中(以便保留对它的引用)会更有意义。否则,没有必要操纵这个数组,因为你无法在getArray()[ index = 3]++;语句的末尾访问它。

答案 1 :(得分:2)

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

public static int[] getArray() {
    return new int[] { 1, 2, 3, 4, 5 };
}

然后让我们调用它,得到一个数组,然后使用你的后增量,最后显示以[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

因为后增量将索引3(第4个值,即4)的值更改为5。

答案 2 :(得分:2)

  

我正在努力理解为什么必要......

对于第一个订单,整个程序是“不必要的”。它没有做任何客观有用的事情。

你也可以说它是“不必要的”,因为编写的程序不会执行后增量。 (呃......也许我在这里放弃太多......除了其他答案已经做过了。)

但实际上,我认为这是重点。这看起来像一个示例/问题来测试您对Java表达式评估和异常的语义的理解。因此,后增量的目的 red herring ;即分散你对真实答案的注意力。这是必要的......

  

后增量算子似乎无关紧要

是。使用编写的代码,它是无关紧要的。但如果代码更现实,那就不会无关紧要了。

答案 3 :(得分:1)

考虑您的标准票价for循环:

for (int i = 0; i < someValue; i++) { 
  // loop body 
}

这可用作i += 1i = i + 1的简写表示法。

在您的情况下,您正在增加getArray()[ index = 3]的值,而不是index变量。我怀疑这会做你想要的(考虑它会是null)。