直到今天,我还在想,举个例子:

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 to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

§15.26.2个例子中引用的一个例子

[.]以下代码正确:

short x = 3;
x += 4.6;

结果x的值为7,因为它等于:

short x = 3;
x = (short)(x + 4.6);

换句话说,你的假设是正确的.

Java相关问答推荐

由于非私有方法未覆盖或实现超类型中的方法,因此无法使用“<>”

使用 UNICODE_CHARACTER_CLASS 标志时的不同 Java 正则表达式匹配行为

如何判断Java中的字符串中是否有多个字符是大写的

是否有 C++ 中首选的构建器模式的替代方案?

如何使用 Spring SAML2 禁用自动生成的页面 /login 和 /logout?

GraphStream - 找不到有效的显示

如何计算 Arraylist 中的每个唯一项?

如何在收到 2 个整数之前要求输入?

为什么 RecyclerView 在其余 Kotlin Android 之前加载

使用 JUnit 和 Mockito 编写单元测试

如何设置底部导航项选择和取消选择的文本 colored颜色 ?

了解以下代码片段中的异常处理

Java 8 DateTimeFormatter 解析在future 很远的 ISO 日期失败

为什么我不能将其他类的常量添加到 java 中的 switch 语句中?

如何在 Intellij 中关闭“将文件添加到 git”?

Java Instant Datetime 如何仅获取具有时区偏移的日期时间?没有地区信息

Spark - 多次运行选择语句的问题

模型映射器 - 使用自定义方法

如何使用一个对象的多个属性并将其映射到另一个对象中的一个?

相同通配符的下限和上限通用约束