在Java中为另一个数组分配数组引用

时间:2013-10-13 17:17:09

标签: java arrays

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]]不会产生4b的0 th 元素,即使它看起来与前一个相同情况?

1 个答案:

答案 0 :(得分:7)

第二个表达式在数组索引器表达式中包含赋值表达式。表达式评估如下:

  • 选择索引器表达式的目标。这是原始数组a
  • 首先将b分配给a,然后将b的元素指定为零,
  • 评估索引表达式
  • 外部索引器的索引评估为b[0]
  • 索引应用于a,返回5
  • ba的分配生效。对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