Java中的链式数组分配
考虑以下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;
temp[index]=index=0下面的代码片段中的code>几乎是不可接受的,但在某些情况下可能是必需的:
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的评估顺序)。支持证据: