Java中的链式数组分配

Java中的链式数组分配,java,Java,考虑以下Java代码片段。我知道语句temp[index]=index=0几乎是不可接受的,但在某些情况下可能是必需的: package arraypkg; final public class Main { public static void main(String... args) { int[]temp=new int[]{4,3,2,1}; int index = 1; temp[index] = index = 0;

考虑以下Java代码片段。我知道语句
temp[index]=index=0几乎是不可接受的,但在某些情况下可能是必需的:

package arraypkg;

final public class Main
{
    public static void main(String... args)
    {
        int[]temp=new int[]{4,3,2,1};
        int index = 1;

        temp[index] = index = 0;
        System.out.println("temp[0] = "+temp[0]);
        System.out.println("temp[1] = "+temp[1]);
    }
}

它在控制台上显示以下输出

temp[0] = 4
temp[1] = 0

我不明白
temp[index]=index=0


temp[1]
如何包含
0
?此赋值是如何发生的?

您的语句为其赋值为零。语句temp[index]=index=0将零写入index和temp[index]。这就是它的意思。将所有变量设为赋值运算符0的左边。

该行的作用是在
index
被赋值
0
后,
temp[index]
应等于
index

这就是为什么这种语法通常是不可接受的。它很难阅读,大多数人都不理解。

作业已经完成(
temp[index]=(index=0)
),对


但是首先要为LHS变量计算表达式
temp[index]
。当时
索引仍然是1。然后RHS(
index=0
)完成。

您将temp[1]和index都分配给了“0” 它从左到右运行。
想想ass temp[index/***/]

你期望的
temp[1]
是什么?我认为很明显,他期望
index
首先成为
0
使
temp[index]
等价于
temp[0]
,这样只有第一个元素被修改。这里的带回家的信息应该是,不要这样写代码。了解Java的微妙之处是一项值得尊敬的技能,但基本上是无用的。像这样的代码根本不应该存在,发现的地方应该立即消除。+1-第一个直接回答OP实际提出的问题的人(关于LHS与RHS的评估顺序)。支持证据: