Java中的数组表达式

时间:2011-12-27 15:01:45

标签: java

考虑Java中的以下表达式。

int[] x={1, 2, 3, 4};
int[] y={5, 6, 7, 0};

x=y;
System.out.println(x[0]);

在控制台上显示5,因为x通过表达式y指向x=yx[0]显然会被评估为{{} 1}}实际上是5的值。

当我用以下语句将上述两个语句替换为单个语句时,

y[0]

它显示System.out.println(x[(x=y)[3]]); 这是1的值,即使它看起来与上述两个语句相同。怎么样?

5 个答案:

答案 0 :(得分:6)

数组y中的第三个索引指向0,因此1是正确的输出。

所以你有

x[(x=y)[3]]

x[y[3]],但y[3]为0,因为数组为0索引,x[0]为1。

答案 1 :(得分:2)

这是因为x = y在索引中产生了新的x。现在x[3] = y[3] = 0x[0] = 1,因为它仍然使用外部的旧x数组。

答案 2 :(得分:1)

Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。

...println(x[y[3]]); // 1

答案 3 :(得分:1)

x[(x=y)[3]] 

分解为

int[] z = y; // new "temp" array (x=y) in your expression above
int i = z[3]; // index 3 in y is 0
System.out.println(x[i]); // prints x[0] based on the value of i...which is 1

答案 4 :(得分:0)

这是所有优先事项

让我们看看这个

我们有以下表达式

  

x = 2 + 5 * 10

因此,在运行about表达式时,首先将其乘以5 * 10,然后将其与2相加,然后将其分配给x,因为“ =”的优先级最小

  

x [(x = y)[3]]   在这种情况下,最令人困惑的是那个(x = y)项,并且大多数程序员认为,它首先将y的引用分配给x,然后继续其余部分,但是   这里的赋值运算符最少解析

这就是为什么当您运行上述表达式后尝试打印x [0]时,由于y的第零个索引包含5,所以我将给出值5