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
相同。的可能重复项