有人能解释为什么答案是B吗?I';我使用Java,我不使用';我不明白
以下哪项陈述是相同的 (一) x-=x+4 (二) x=x+4-x (三) x=x-(x+4) A.(I)和(II)是相同的 B.(I)和(III)是相同的 C.(II)和(III)是相同的 D.(I)、(II)和(III)是相同的有人能解释为什么答案是B吗?I';我使用Java,我不使用';我不明白,java,math,Java,Math,以下哪项陈述是相同的 (一) x-=x+4 (二) x=x+4-x (三) x=x-(x+4) A.(I)和(II)是相同的 B.(I)和(III)是相同的 C.(II)和(III)是相同的 D.(I)、(II)和(III)是相同的 x -= y is equivalent to x = x - y 所以 x -= x + 4 相当于 x = x - (x+4) 所以假设(II)x=x-(x+4)应该是(III)x=x-(x+4)(因为有两个选项标记为(II)),那么(I)和(III)是相
x -= y is equivalent to x = x - y
所以
x -= x + 4
相当于
x = x - (x+4)
所以假设(II)x=x-(x+4)
应该是(III)x=x-(x+4)
(因为有两个选项标记为(II)
),那么(I)
和(III)
是相同的。- 案例(I)扩展为x=x− (x+4)根据Java
操作符,-=
数学上简化为x=−四, - 案例(II)在数学上简化为x=4
- 案例(III)在数学上简化为x=−四,
因此(I)和(III)是相同的,这意味着答案是(B)。这是因为运算符优先级。Java对其进行评估,就好像它是 x-=(x+4)
因此,它首先计算
(x+4)
,然后从x
中减去它,这就是-=
部分的-
意思,然后更新x
,这就是=
部分的意思。-=
就是所谓的复合赋值
这些只是捷径,并结合了原子操作
x-=y
代表x=x-y
x+=y
代表x=x+y
x++
代表x=x+1
x--
代表x=x-1
还有++x和--x,它们的作用与x++/x相同,只是它们返回x的值,然后它才递增/递减
Java官方教程:
“您还可以将算术运算符与简单
用于创建复合赋值的赋值运算符。例如,x+=1;
和x=x+1;两者都将x的值增加1。”
我认为同样适用于
*=
,/=
和%=
我相信II和II在java中是相同的复合运算符,这些操作中的任何一个都是原子的。我没有声称它们是原子的。我声称它们是由原子操作计算出来的。例如:x++
是由原子操作计算出来的:1。读x2。将x增加13。将x写回内存请注意,如果x
的类型小于int
(字节、字符、短),则(II)
将无法编译。像+
这样的数学运算符将把它们“升级”到int
,执行该操作,并尝试将结果(仍然是int
)存储到x
,这将打乱编译器。另一方面,像-=
(在解决方案(I)
)这样的复合运算符会自动添加强制转换,因此编译器是正常的(但在运行时可能会出现溢出问题)。