我试图理解为什么必须包含后增量运算符 在变量重新分配后的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);
}
}
答案 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 += 1
或i = i + 1
的简写表示法。
在您的情况下,您正在增加getArray()[ index = 3]
的值,而不是index
变量。我怀疑这会做你想要的(考虑它会是null
)。