【问题标题】:Short hand assignment operator, +=, True Meaning?简写赋值运算符,+=,真正的含义?
【发布时间】:2013-04-28 00:58:15
【问题描述】:

我了解到i+=2 是i=i+2 的简写。但现在我对此表示怀疑。 对于下面的代码,上面的知识是没有用的:

byte b=0; b=b+2; //Error:Required byte, Found int

上面的代码是有道理的,因为2是int类型,表达式返回int值。

但是,以下代码运行良好:

byte b=0; b+=2; //b stores 2 after += operation

这迫使我怀疑+= 速记运算符比我知道的有点更多。 请赐教。

【问题讨论】:

标签: java assignment-operator shorthand implicit-conversion


【解决方案1】:

如有疑问,您可以随时查看 Java 语言规范。在这种情况下,相关部分是 15.26.2,复合赋值运算符。

E1 op= E2 形式的复合赋值表达式是等价的 到 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次。

所以你几乎是正确的,除了添加了演员表。在你的情况下: b+=2; 符合 b=(byte)(b+2);

【讨论】:

  • 根据这个不会 2 仍然被认为是一个 int 吗?填写占位符,我读为 b = (byte)b + 2;
  • 所以i+=2 符合i=(type of i)(i+2)。谢谢:)
  • @KevinBowersox 不,你必须把它读成b = (byte)(b + 2);
  • 哎呀我错过了那些额外的括号
  • @Antimony 你必须非常熟悉规范才能在两分钟内找到它。
【解决方案2】:

来自 C++ 背景,我可以尝试声称这个概念是相似的。运算符+= 被定义为其左侧对象的方法,将其右侧对象作为参数传入。这使得语言的编写者可以轻松地投入诸如类型转换和兼容性修复之类的东西。唯一的一点是,据我所知,Java 不允许用户重载操作符函数

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 2017-01-14
    • 2016-04-30
    • 1970-01-01
    • 2010-12-26
    • 2013-11-09
    • 2016-04-25
    • 2011-08-02
    • 2019-10-06
    相关资源
    最近更新 更多