有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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个元素,尽管它看起来与前面的情况相同


共 (1) 个答案

  1. # 1 楼答案

    第二个表达式以数组索引器表达式中的赋值表达式为特征。表达式的计算结果如下:

    • 已选择索引器表达式的目标。这是原始数组a
    • 通过首先将b赋值给a,然后在索引0处取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