【问题标题】:Difference between s = s + s and s += s with short [duplicate]s = s + s 和 s += s 与短 [重复] 之间的区别
【发布时间】:2014-02-14 09:31:21
【问题描述】:

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

short s = 1;
s += s;

虽然这个没有:

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

我读到shorts 会自动升级为int,但这两个代码有什么区别?

【问题讨论】:

    标签: java operators short


    【解决方案1】:

    short 升级为 ints 是对的。这发生在二元运算符+ 的评估过程中,它被称为二元数值提升

    但是,这可以通过+= 等复合赋值运算符有效地消除。 Section 15.26.2 of the JLS 状态:

    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 相同。
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2011-08-23
    • 2014-11-02
    相关资源
    最近更新 更多