在数组索引中赋值

Sud*_*han 6 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]);
Run Code Online (Sandbox Code Playgroud)

实际答案1 2

谢谢

sci*_*uff 7

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

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

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

所以它将元素打印在原始a数组的0处

System.out.println(a[0]); 那么简单 b[0]


Tho*_*mas 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

a[0]现在产生2a引用数组b(因为第2步)和该数组中的第一个元素2.