在测试中我遇到了以下问题:
int[] a = {3, 2, 1, 0};
int[] b = {12, 13, 14, 15};
System.out.println(b[(b=a)[3]]); // ?
System.out.println(b[3]); // ?
输出:
12
0
谁可以解释这个结果?
b[ (b=a) [3] ]
建筑意味着什么?
答案 0 :(得分:4)
只需从左到右评估该表达式:
b[ (b=a) [3] ]
b
中的索引。正在访问的索引由[]
:
[(b=a)[3]]
评估里面的表达式:
b
引用分配了a
引用的值。所以,现在b
指的是a
引用的数组。该表达式实际上等同于:
b = a
,然后是[b[3]]
。 因此,原始表达式变为:
b[a[3]] // == b[0] // == 12
现在,在第一个表达式之后,由于b
引用已更改为指向a
数组,因此第二个表达式b[3]
与:a[3]
相同,是0
。
答案 1 :(得分:0)
b[ (b=a)[3] ]
表示:
b
在此作业a
(b=a)
值
(b=a)[3]
表示返回b
的4 th 索引为零(即数组b具有相同的a = {3, 2, 1, 0}
值)b[(b=a)[3]]
表示b[0]
,12
。