在数组索引中赋值

时间:2012-03-22 09:27:32

标签: java arrays

请查看下面的代码段,让我知道如何以1 2的形式出现。

int[] a = { 1, 2, 3, 4 };
int[] b = { 2, 3, 1, 0 };
System.out.println( a [ (a = b)[3] ] );
System.out.println(a[0]);

实际答案1 2

由于

3 个答案:

答案 0 :(得分:7)

说真的,这是什么目的?你为什么要做一些使代码难以理解的事情。你期望结果是什么?

System.out.println( a [ (a = b)[3] ] );的结果与将事物推送到评估堆栈的顺序有关...例如

  1. 参考
  2. 将存储在a中的参考更改为存储在b
  3. 中的参考
  4. 评估b [3] => 0
  5. 打印在1)中推送引用的数组的索引0,即原始a
  6. 所以它将元素打印在原始a数组

    的0处

    System.out.println(a[0]);只是b[0]

答案 1 :(得分:6)

我会试着解释一下:

a [ (a = b)[3] ]将按以下顺序执行:

  1. a [...] - 将读取数组a并为其存储引用
  2. (a = b) - 变量a设置为引用数组b
  3. (a=b)[3] - 读取数组b的第4个元素(因为步骤2),值为0
  4. a [ (a = b)[3] ] - 现在等于a[0](由于步骤1和3),值为1
  5. a[0]现在产生2,因为a引用了数组b(因为第2步),并且该数组中的第一个元素是2

答案 2 :(得分:0)

前两行初始化您的数组。第一个sysout将b分配给a然后打印[3],即。你的a现在有值{2,3,1,0}。第二个sysout打印一个[0]。