Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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,我们可以用以下两种不同的方式编写同一条语句。我对为x的值提供两个输出有疑问,如下所示 int x = 10; x = x*2+5; // Here the value of x is 25. x = 10; x *= 2+5; // Here the value of x is 70. 很明显,这是因为, 1.在第一个语句中,x乘以2,然后加5。 2.在第二个语句中,将5和2相加,然后乘以x。 但是为什么会这样呢?因为你的sec声明将被评估为x=x*(2+5) 而在第一种情况下,其正常的从左

我们可以用以下两种不同的方式编写同一条语句。我对为x的值提供两个输出有疑问,如下所示

int x = 10;
x = x*2+5; // Here the value of x is 25.

x = 10;
x *= 2+5; // Here the value of x is 70.
很明显,这是因为, 1.在第一个语句中,x乘以2,然后加5。 2.在第二个语句中,将5和2相加,然后乘以x。
但是为什么会这样呢?

因为你的sec声明将被评估为
x=x*(2+5)

而在第一种情况下,其正常的从左到右的优先级。Java保证在应用运算符之前对运算符的所有操作数进行完全求值

复合赋值运算符具有以下语法:

<variable> <op>= <expression>
=
以及以下语义:

<variable> = (<type>) (<variable> <op> (<expression>))
=()(())
“变量”的类型为“类型”,且“变量”仅计算一次。注意语义中隐含的强制转换和括号。此处“op”可以是任意复合赋值运算符(*、%、/etc)。复合赋值运算符在Java中的所有运算符中具有最低的优先级,允许在赋值之前对右侧的表达式求值。

请参阅:<代码>*
绑定比
+
更紧密,两者都比
=
*=
更紧密

int x = 10;
x = x*2+5;



* has more precedence than + . So 10 * 2 + 5 = 25


x = 10;
x *= 2+5; 



+ have more precedence than *=. So the result is 70
对于案例2 运算符“=”的优先级最低,因此计算操作数2+5,然后计算运算符“*=”(因为运算符=的优先级最低,而不是“+”)。
只有在这段时间内,操作员“”才会出现在场景中。因此,在您的第一个语句X=X*2+5中,10*7被分配给X,它给出了X=25,因为*的优先级高于+。 所以它就像

x=10*2
x=20+5;

因为你的sec声明将被评估为x=x*(2+5)

在你的第二个语句中,你可以看到它有方括号,所以openinng方括号(与*)相比有更高的优先级,所以它首先计算方括号数据,然后乘以x

X=x*(2+5)
x=10*7;
这是的一个示例。使用简单赋值运算符,将计算运算符右侧的值并将其赋值给其左侧的操作数。例如:

int x = 2 + 5;
显然,
x
的值为7


复合赋值运算符遵循相同的基本思想:运算符右侧的值由复合赋值运算符计算、修改(在这种情况下,将现有的
x
值乘以最终计算值7,并分配给左边的操作数。

如上所述,很明显,这是因为,1.在第一个语句中,x乘以2,然后再加上5.2.在第二个语句中,将5和2相加,然后再乘以x。但我的问题是,为什么我是为什么不这样做?背后的规则是什么?那是因为语句的右侧总是被执行的first@NamalFernando当前位置请参阅垃圾神对您的问题的评论--这就是运算符的定义。(这也是它在C语言中的工作方式,大多数语言都是从C语言借用此运算符。)@casablanca:是的,我现在知道了。另请参阅。
int x = 2 + 5;