java - 分配一个变量,实际发生了什么,Java

标签 java runtime variable-assignment

在下面的例子中实际发生了什么?

int a = 1;
a += (a = 2);

输出是 3,但是我想知道幕后到底发生了什么。 例如,我知道括号比 + 具有更高的优先级,因此首先发生 (a = 2) 表达式应该变为 a = 2 + 2。 在运行时,首先应执行括号内的表达式,然后 a 变为 2。似乎 + 左侧的第一个 a 之前“加载” (a = 2) 并且这最后一个表达式似乎并没有覆盖之前的加载。 换句话说,我对幕后究竟发生了什么感到很困惑。

如果有人知道,请提前致谢。

最佳答案

来自 JLS section §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.

因此对于您的示例,我们有:

a = (a) + (a = 2)

从左到右计算表达式。因此输出 3

关于java - 分配一个变量,实际发生了什么,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303350/

相关文章:

c++ - 为什么 C 和 C++ 支持结构内数组的成员赋值,但通常不支持?

java - 写入 SD 卡 "java.io.FileNotFoundException: Permission denied"

javascript - Symfony 4 - 如何在 javascript 中使用资源?

java - 在运行时加载 jar 会导致 NoClassDefFoundError/ClassNotFoundException

本地 Azure 函数 - 为什么使用 Docker 容器?

c - If 语句比较开销与赋值开销

java - 启动画面错误默认图像尺寸太大

Java/Ada Big Endian 到 Linux Little Endian 问题

java - 如何根据一些规则按降序创建优点列表?

javascript - 在 JavaScript 中为 const 赋值从右到左与从左到右