首页 >Java >java教程 >为什么 Java 中 `j = j` 会导致 `j` 保持为 0?

为什么 Java 中 `j = j` 会导致 `j` 保持为 0?

DDD
DDD原创
2024-10-26 23:43:30699浏览

Why Does `j = j  ` Result in `j` Remaining 0 in Java?

Java 中的后自增运算符

在 Java 中,后自增运算符 ( ) 在计算后将变量的值加一。这种行为可能会导致意外结果,如“Java Puzzlers”中提供的代码所示:

<code class="java">public class Test22 {
    public static void main(String[] args) {
        int j = 0;
        for (int i = 0; i < 100; i++) {
            j = j++;
        }
        System.out.println(j); // prints 0

        int a = 0, b = 0;
        a = b++;
        System.out.println(a);
        System.out.println(b); // prints 1
    }
}</code>

检查语句 j = j 时会出现混乱。根据 Java 语言规范 (JLS),此语句等效于:

<code class="java">temp = j;
j = j + 1;
j = temp;</code>

但是,此解释与 a = b 的结果相矛盾,后者将 0 赋给 a 并将 b 递增为 1。对于这种差异,重要的是要注意 a = b 的计算方式如下:

<code class="java">temp = b;
b = b + 1;
a = temp;</code>

这意味着 lhs = rhs 形式的后增量赋值相当于:

<code class="java">temp = rhs;
rhs = rhs + 1;
lhs = temp;</code>

将此规则应用于 j = j 和 a = b 可以澄清代码中观察到的结果。 j = j 有效地将 j (0) 的值分配给 temp,将 j 增加到 1,然后将 temp (0) 分配回 j。这解释了为什么尽管有增量运算符,j 仍打印 0。

以上是为什么 Java 中 `j = j` 会导致 `j` 保持为 0?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn