Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的数组表达式_Java - Fatal编程技术网

Java中的数组表达式

Java中的数组表达式,java,Java,考虑以下Java中的表达式 int[] x={1, 2, 3, 4}; int[] y={5, 6, 7, 0}; x=y; System.out.println(x[0]); 将在控制台上显示5,因为x通过表达式x=y指向y,x[0]显然将计算为5,这实际上是y[0]的值 当我用下面的语句替换上面的两个语句时,将这两个语句组合成一个语句 System.out.println(x[(x=y)[3]]); 它显示1,这是x[0]的值,尽管它似乎与上述两条语句等效。如何操作?数组y中的第三个索

考虑以下Java中的表达式

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

x=y;
System.out.println(x[0]);
将在控制台上显示
5
,因为
x
通过表达式
x=y
指向
y
x[0]
显然将计算为
5
,这实际上是
y[0]
的值

当我用下面的语句替换上面的两个语句时,将这两个语句组合成一个语句

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

它显示
1
,这是
x[0]
的值,尽管它似乎与上述两条语句等效。如何操作?

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

你有吗

x[(x=y)[3]]


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

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

Java编程语言保证操作符的操作数按照特定的求值顺序求值,即从左到右

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

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

这都是关于优先权的问题

让我们看看这个

我们有下面的表达

x=2+5*10

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

x[(x=y)[3]] 在这种情况下,最让人困惑的是(x=y)这个术语,大多数程序员认为它首先将y的引用分配给x,然后继续进行剩余部分,但是 这里的赋值运算符是最小的


这就是为什么在运行上述表达式后尝试打印x[0]时,我会给出值5,因为y的第0个索引包含5

您不应该使用此类表达式。它们令人困惑,容易出错,很难调试。它们仍然存在,我们必须知道Java或任何语言中与这些东西相关的一切。
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