zig*_*ggy 24 java arrays scjp ocpjp
为什么此示例中的输出为1?
public static void main(String[] args){
int[] a = { 1, 2, 3, 4 };
int[] b = { 2, 3, 1, 0 };
System.out.println( a [ (a = b)[3] ] );
}
Run Code Online (Sandbox Code Playgroud)
我以为会是2.即,表达式评估为:
a[(a=b)[3]]
a[b[3]] //because a is now pointing to b
a[0]
Run Code Online (Sandbox Code Playgroud)
不应该[0]为2,因为a指向b?
提前致谢.
a [ (a = b)[3] ] )
Run Code Online (Sandbox Code Playgroud)
解释如下:
a = b => a = {2, 3, 1, 0};
( a = b )[3] => 0;
Run Code Online (Sandbox Code Playgroud)
这里有一个技巧:a评估为之前的值b被分配给它.
a[(a = b)[3]) => a[0] = 1;
Run Code Online (Sandbox Code Playgroud)
考虑Java中的运算符优先级.它应该更明显一点.