int a[]={1, 2, 3, 4, 5};
int b[]={4, 3, 2, 1, 0};
a=b;
System.out.println("a[0] = "+a[0]);
这显示a[0] = 4
显而易见,因为a
被分配了对b
的引用。
如果修改如下
int a[]={1, 2, 3, 4, 5};
int b[]={4, 3, 2, 1, 0};
System.out.println("a[(a=b)[0]] = "+a[(a=b)[0]]); //<-------
然后,它会显示a[(a=b)[0]] = 5
。
为什么这个表达式a[(a=b)[0]]
不会产生4
,b
的0 th 元素,即使它看起来与前一个相同情况?
答案 0 :(得分:7)
第二个表达式在数组索引器表达式中包含赋值表达式。表达式评估如下:
a
b
分配给a
,然后将b
的元素指定为零,b[0]
a
,返回5
b
到a
的分配生效。对a[i]
的后续访问将引用b
,而不是原始a
。基本上,您的单行表达式与此两行代码段相同:
System.out.println("a[(a=b)[0]] = "+a[b[0]]); // Array reference completes first
a=b; // Array assignment is completed last