【问题标题】:Assigning a value to a variable in a chain in Java [duplicate]在Java中为链中的变量赋值[重复]
【发布时间】:2012-10-18 11:37:36
【问题描述】:

可能重复:
Java - Order of Operations - Using Two Assignment Operators in a Single Line

如果我们在如下链中为变量赋值,

int x=10, y=15;
int z=x=y;

System.out.println(x+" : "+y+" : "+z);

那么xyz 这三个变量的值都变为15


但是我不理解数组的以下现象。

int array[]={10, 20, 30, 40, 50};
int i = 4;

array[i] = i = 0;    
System.out.println(array[0]+" : "+array[1]+" : "+array[2]+" : "+array[3]+" : "+array[4]);

它输出10 : 20 : 30 : 40 : 0。它将最后一个元素的值array[4] 替换为0

关于前面的赋值语句 - int z=x=y;,我希望第一个元素的值意味着 array[0] 将替换为 0。为什么不是这样?这很简单,但我无法弄清楚。你能解释一下吗?


顺便说一句,这个赋值语句array[i] = i = 0; 是虚拟的,它在这段代码中没有自己的价值,不应该再使用,但我只是想知道在这种情况下它实际上是如何工作的。

【问题讨论】:

标签: java arrays variable-assignment


【解决方案1】:

int i = 4; 当 i 等于 4 时,array[i] 等于 array[4],所以 array[i] = i = 0; 等于 array[4] = i = 0;。这就是它将索引 4 的值更改为 0 的方式。

【讨论】:

  • 这是第一个也是正确的。为什么它被否决了?
【解决方案2】:

分隔符 [] 和 () 更改优先级。这些分隔符内的所有内容都将在 Java 向外查看之前进行计算。

array[i] = i = 0;

在编译阶段,此行的第一次更改将发生如下:

array[4] = i = 0; // subscript separator is evaluated first.

现在,赋值操作是右关联的,所以,i 被赋值为 0,然后 array[4] 被赋值为 i,即0

检查以下链接:

【讨论】:

    【解决方案3】:

    让我打破它....

    您的声明:

    int array[]={10, 20, 30, 40, 50};

    实施:

    array[0] => 10
    
    array[1] => 20
    
    array[2] => 30
    
    array[3] => 40
    
    array[4] => 50
    

    您的声明:

    int i = 4;

    实施:

    i => 4
    

    您的声明:

    array[i] = i = 0;

    实施:

    array[4] = i = 0;
    
    array[4] = 0
    

    如果你想要array[0] => 0,那就这样做吧……

    int i = 0;
    
    array[i] = i = 0
    

    【讨论】:

      【解决方案4】:

      因为array[i] 在赋值操作之前被评估

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        相关资源
        最近更新 更多