java中的赋值运算符
我们可以用以下两种不同的方式编写同一条语句。我对为x的值提供两个输出有疑问,如下所示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) 而在第一种情况下,其正常的从左
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;