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

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相关问答推荐

如何将一些命令写入Chrome控制台,然后使用Java将输出存储在selenium中

将@ManyToOne JPA Composite Key用作Id保存实体添加额外参数

Proguard配置以保留具有参数的注释的成员

是否可以从@ TrustMapping中删除特定方法的基路径?

如何让TaskView总是添加特定的列来进行排序?

在URL类图中表示Java swing类

编译多个.Java文件并运行一个依赖于用户参数的文件

为什么不应用类型推断?

Jakarta CDI强制bean构造/注册遗留事件侦听器

有没有办法让扩展变得多态?

如何获取Instant#of EpochSecond(?)的最大值

如何将其他属性引用到log4j2 yaml配置中?

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

Instancio未在日志(log)中显示测试失败消息

与IntArray相比,ArrayList<;Int>;对于大量元素的性能极差

从12小时开始的日期模式

如何在ApacheHttpClient 5中为单个请求设置代理?

不能在 map 上移除折线

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

如何在单元测试中获得我的装饰Mapstruct映射器的实例?