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

在Java中将数组引用分配给另一个数组,java,arrays,Java,Arrays,这将显示a[0]=4,因为a分配了对b的引用 如果按如下所示进行修改 int a[]={1, 2, 3, 4, 5}; int b[]={4, 3, 2, 1, 0}; a=b; System.out.println("a[0] = "+a[0]); inta[]={1,2,3,4,5}; intb[]={4,3,2,1,0}; System.out.println(“a[(a=b)[0]=”+a[(a=b)[0]])// 第二个表达式以数组索引器表达式中的赋值表达式为特征。表达式的计算

这将显示
a[0]=4
,因为
a
分配了对
b
的引用


如果按如下所示进行修改

int a[]={1, 2, 3, 4, 5};
int b[]={4, 3, 2, 1, 0};

a=b;

System.out.println("a[0] = "+a[0]);
inta[]={1,2,3,4,5};
intb[]={4,3,2,1,0};

System.out.println(“a[(a=b)[0]=”+a[(a=b)[0]])// 第二个表达式以数组索引器表达式中的赋值表达式为特征。表达式的计算结果如下:

  • 已选择索引器表达式的目标。这是原始数组
    a
  • 首先将
    b
    赋值给
    a
    ,然后在索引零处取
    b
    的元素,从而计算索引表达式
  • 外部索引器的索引评估为
    b[0]
  • 索引应用于
    a
    ,返回
    5
  • b
    分配给
    a
    生效。对
    a[i]
    的后续访问将引用
    b
    ,而不是原始
    a
从本质上讲,您的单行表达式相当于此两行代码段:

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]]);  //<-------

数组索引有一个。所以最后它只有一个[4]…:)@dasblinkenlight,但是为什么将b赋值给a只在进程结束时生效?@AlexR为了决定表达式
a[something]
的结果,实际上何时赋值并不重要。唯一重要的是选择哪个对象作为
[]
表达式的第一个操作数。在本例中,对象是旧的
a
,因为赋值在操作数的右侧,因此赋值的效果在表达式的该点不可见。
System.out.println("a[(a=b)[0]] = "+a[b[0]]); // Array reference completes first
a=b;                                       // Array assignment is completed last