我们可以用两种不同的方式写下相同的语句如下.我有一个问题,为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.
Run Code Online (Sandbox Code Playgroud)
很明显,这是因为,1.在第一个状态中,x乘以2,然后加上5. 2.在第二个状态中,将5加到2,然后再乘以x.但为什么它会这样呢?
因为您的sec语句将被评估为 x = x * (2+5);
x = 10;
x *= 2+5;
x = x * (2+5);
Run Code Online (Sandbox Code Playgroud)
而在第一种情况下,它的正常从左到右优先.Java保证在应用运算符之前完全评估运算符的所有操作数.
复合赋值运算符具有以下语法:
<variable> <op>= <expression>
Run Code Online (Sandbox Code Playgroud)
和以下语义:
<variable> = (<type>) (<variable> <op> (<expression>))
Run Code Online (Sandbox Code Playgroud)
"变量"的类型是"类型","变量"仅评估一次.请注意语义中隐含的强制转换和括号.这里"op"可以是任何复合赋值运算符(*,%,/ etc).复合赋值运算符具有Java中所有运算符的最低优先级,允许在赋值之前评估右侧的表达式.
| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |