Java 数组 - 为什么输出为“1”?

2022-09-01 20:16:27

为什么此示例中的输出为 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] ] );   
}

我以为会是2。即,表达式的计算结果为:

a[(a=b)[3]]
a[b[3]]    //because a is now pointing to b
a[0]   

a[0] 不应该是 2,因为 a 指向 b 吗

提前致谢。


答案 1

每个运算符的参数从左到右进行计算。即,前面的 在内容之前被计算,此时它仍然引用第一个数组。a[...]


答案 2

这也让我感到奇怪...但是,请在此处查看第 15.7.1 节

实质上,操作数是从左到右计算的。但也要注意这一点:

建议代码不要严重依赖此规范。当每个表达式最多包含一个副作用(作为其最外层的操作)时,以及当代码不依赖于由于表达式的从左到右计算而产生的确切异常时,代码通常更清晰。