Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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
有人能解释为什么答案是B吗?I';我使用Java,我不使用';我不明白_Java_Math - Fatal编程技术网

有人能解释为什么答案是B吗?I';我使用Java,我不使用';我不明白

有人能解释为什么答案是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-=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)
是相同的。

  • 案例(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)
)这样的复合运算符会自动添加强制转换,因此编译器是正常的(但在运行时可能会出现溢出问题)。