=运算符在三个整数上使用两次时会做什么?

时间:2014-06-27 05:10:47

标签: java

这是做什么的?

int x = 1;
int y = 2;
int z = 3;
x = y = z;

我在一些开源项目中遇到过多种类型的东西,并且总是被它们弄糊涂了。通过它们我的意思是=运算符在三个整数上使用两次,即x = y = z;。我需要了解这一点。谢谢!

8 个答案:

答案 0 :(得分:11)

操作员=评估右侧并将结果分配给左侧的变量。表达式返回此值。

为此,评估从右向左进行:

x = (y = z);

y变为3,返回的值为3.因此,x也被指定为3。

答案 1 :(得分:1)

=正在评估从右到左的

x = y = z会使xy等于z,即= 3

答案 2 :(得分:1)

在大多数语言中=代表赋值运算符,规则是赋值运算符的左侧必须是变量/对象。 (您也可以这样做object1=object2,但object2的引用将是此处的值)

你不能2=32=2这里发生的事情是你首先要确定z to y

的价值

x=y=z

  1. y=z
  2. x=y
  3. 此处从右到左进行评估,因此y的值为z,而x的值为y

    可能这里要注意你不能直接x=4=5

    It must be variable=variable=(value/variable)<------------------
    
    • 因此,在此期间,z 必须已初始化

答案 3 :(得分:1)

=运算符会将右侧表达式的值赋给左侧的变量 因此,在x=y=z中,z的第一个值将分配给y,然后将其分配给x

STEP 1 : x=(y=z) /assign value of z to y.
STEP 2 : x=y /assign value of y to x.

因此x的值为3。

答案 4 :(得分:1)

赋值运算符始终评估右侧表达式,因此您的语句等同于

//this expression is equal to 
x=y=z;
        y=z;
        x=y;
//so first y becomes 3 and the value assign to x
//means first assign the value of z to y than assign the value of y to x

答案 5 :(得分:1)

x = y = zx=(y=z)

相同

因此,首先为y分配z,i,e 3的值,然后将结果分配给x。

最后,值为x = 3y = 3z = 3

答案 6 :(得分:1)

=运算符从右到左进行评估。

所以,当你写x=y=z时,它的工作形式是右手边的左手边

<强> 1。 y = z,即z赋值为y的值

<强> 2。然后x = y,即y的新值现在分配给x

例如,

如果x = 1,y = 2且z = 3则在x=y=z值x = 3之后,y = 3且z = 3

值以这种方式分配

x=y=z <-------------

答案 7 :(得分:0)

请阅读一些规范:

There are 12 assignment operators; all are syntactically right-associative (they group right-to-left). Thus, a=b=c means a=(b=c), which assigns the value of c to b and then assigns the value of b to a.

另见

  1. http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26
  2. http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html
  3. https://stackoverflow.com/a/12850755/1834700