[英] Why don't Java's +=, -=, *=, /= compound assignment operators require casting?
直到今天,我还在想,举个例子:
i += j;
只是一条捷径:
i = i + j;
但如果我们try 一下:
int i = 5;
long j = 8;
那么i = i + j;
将不会编译,但i += j;
将编译得很好.
这是否意味着事实上i += j;
是这样的捷径
直到今天,我还在想,举个例子:
i += j;
只是一条捷径:
i = i + j;
但如果我们try 一下:
int i = 5;
long j = 8;
那么i = i + j;
将不会编译,但i += j;
将编译得很好.
这是否意味着事实上i += j;
是这样的捷径
与这些问题一样,JLS掌握着答案.在这种情况下是§15.26.2 Compound Assignment Operators.节选:
A compound assignment expression of the form
E1 op= E2
is equivalent toE1 = (T)((E1) op (E2))
, whereT
is the type ofE1
, except thatE1
is evaluated only once.
从§15.26.2个例子中引用的一个例子
[.]以下代码正确:
short x = 3; x += 4.6;
结果x的值为7,因为它等于:
short x = 3; x = (short)(x + 4.6);
换句话说,你的假设是正确的.
由于非私有方法未覆盖或实现超类型中的方法,因此无法使用“<>”
使用 UNICODE_CHARACTER_CLASS 标志时的不同 Java 正则表达式匹配行为
如何使用 Spring SAML2 禁用自动生成的页面 /login 和 /logout?
为什么 RecyclerView 在其余 Kotlin Android 之前加载
如何设置底部导航项选择和取消选择的文本 colored颜色 ?
Java 8 DateTimeFormatter 解析在future 很远的 ISO 日期失败
为什么我不能将其他类的常量添加到 java 中的 switch 语句中?