Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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 s=s+;s和s+;=这是短的_Java_Operators_Short - Fatal编程技术网

Java s=s+;s和s+;=这是短的

Java s=s+;s和s+;=这是短的,java,operators,short,Java,Operators,Short,我做了一个小测试来操作short,结果遇到了一个编译问题。 编译以下代码: short s = 1; s += s; 而这一个没有: short s = 1; s = s + s; //Cannot convert from int to short 我已经读到,short自动升级为int,但是这两种代码之间有什么区别呢?你说得对,short升级为int。这发生在二进制运算符+的求值过程中,称为二进制数字提升 但是,使用复合赋值运算符(如+=)可以有效地消除这一点。国家: 形式为E1 op=

我做了一个小测试来操作
short
,结果遇到了一个编译问题。 编译以下代码:

short s = 1;
s += s;
而这一个没有:

short s = 1;
s = s + s; //Cannot convert from int to short

我已经读到,
short
自动升级为
int
,但是这两种代码之间有什么区别呢?

你说得对,
short
升级为
int
。这发生在二进制运算符
+
的求值过程中,称为二进制数字提升

但是,使用复合赋值运算符(如
+=
)可以有效地消除这一点。国家:

形式为E1 op=E2的复合赋值表达式等价于E1=(T)((E1)op(E2)),其中T是E1的类型,但E1仅计算一次


也就是说,这相当于回到
short

我更喜欢你的答案,而不是我的答案,而不是你站起来投票,我把我的答案删除了,干得好。@Patrick:复合赋值还有另一种不同的方式。显然
x*=y+z并不意味着
x=x*y+z而是
x=x*(y+z)。嗯,
+
也是如此
x+=y+z
表示
x=x+(y+z)
,而不是
x=x+y+z
。以这种方式使用
+=
时,右加法发生在左加法之前。此外,代数加法是结合的和交换的,但计算机数学可以违反这些性质。
x+=y+z
的结果不必与
x=x+y+z
相同。的可能重复项