请查看下面的代码片段,让我知道如何输出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
谢谢
说真的,这是什么目的?你为什么要做一些使代码难以理解的事情.您期望结果如何?
结果System.out.println( a [ (a = b)[3] ] );与事物被推送到评估堆栈的顺序有关...例如
所以它将元素打印在原始a数组的0处
System.out.println(a[0]); 那么简单 b[0]
我会试着解释一下:
a [ (a = b)[3] ] 将按以下顺序执行:
a [...]- a将读取数组并为其存储引用(a = b)- 变量a设置为引用数组b(a=b)[3]- b读取数组的第4个元素(因为步骤2),值为0a [ (a = b)[3] ]- 现在这等于a[0](因为步骤1和3),值是1a[0]现在产生2自a引用数组b(因为第2步)和该数组中的第一个元素2.