简写赋值运算符,+=,真正的含义?
Posted
技术标签:
【中文标题】简写赋值运算符,+=,真正的含义?【英文标题】: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
这迫使我怀疑+=
速记运算符比我知道的有点更多。
请赐教。
【问题讨论】:
见:***.com/questions/7038012/… 当有好的答案存在时,回答没有用。检查this one。那里已经讨论了这个问题。 【参考方案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 不允许用户重载操作符函数
【讨论】:
以上是关于简写赋值运算符,+=,真正的含义?的主要内容,如果未能解决你的问题,请参考以下文章