Java 中j+=i 和 j=+i 的区别

博主分享了两个关键代码段,对比了Java和Python中j=i和j+=i的不同作用,通过实例展示了它们在循环更新过程中的效果。

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到网站

、j+=i 意思就是:把i获取到的值与j相加 之后再把值赋给j 更新j的值
换句话说:j = j+i;
写下代码更好的理解一下:

@Test
    public void test1() {
        int j = 0;
        for (int i = 0; i < 10; i++) {
	            j+=i;
            System.out.println("j=" + j + ",i=" + i);
        }
    }

输出结果,更好的验证了这一点

j=0,i=0
j=1,i=1
j=3,i=2
j=6,i=3
j=10,i=4
j=15,i=5
j=21,i=6
j=28,i=7
j=36,i=8
j=45,i=9

、j=+i 就是把i的值赋给j 这个很好理解

@Test
    public void test1() {
        int j = 200;
        for (int i = 0; i < 10; i++) {
            j = +i;
            System.out.println("j=" + j + ",i=" + i);
        }
    }

输出结果:

j=0,i=0
j=1,i=1
j=2,i=2
j=3,i=3
j=4,i=4
j=5,i=5
j=6,i=6
j=7,i=7
j=8,i=8
j=9,i=9
Java 中,表达式 `j += i++` 的行为涉及到两个关键点:操作符优先级与操作数求值顺序。这个表达式等价于 `j = j + i++;`,其中 `i++` 是后缀自增操作,其语义是:**先使用 `i` 的当前值参与运算,之后再将 `i` 的值加 1**。 ### 行为解析 表达式 `j += i++` 的执行过程如下: 1. 首先,`i++` 的值是 `i` 的当前值(即自增前的值)。 2. 然后,`j` 与这个当前值相加。 3. 最后,`i` 的值自增 1。 例如,假设初始时 `i = 2`,`j = 5`,则执行 `j += i++;` 的结果是: - `i++` 的值为 2(使用当前值); - `j = 5 + 2 = 7`; - 然后 `i` 变为 3。 最终结果为 `j = 7`,`i = 3`。 ### 字节码层面的行为 在 JVM 字节码中,该表达式的执行顺序是按照操作数栈的逻辑进行的。以如下代码为例: ```java int i = 2; int j = 5; j += i++; ``` 对应的字节码大致如下: ``` 0: iconst_2 1: istore_1 2: iconst_5 3: istore_2 4: iload_2 5: iload_1 6: iinc 1, 1 9: iadd 10: istore_2 ``` 解释如下: - `iload_2` 将 `j` 的值压入操作数栈; - `iload_1` 将 `i` 的值压入操作数栈; - `iinc 1, 1` 将本地变量表中索引为 1 的变量(即 `i`)自增 1; - `iadd` 将栈顶两个值相加; - `istore_2` 将结果存回 `j`。 由此可以看出,`i` 的自增操作在加法之前就已经执行,但参与加法运算的仍是自增前的值,这与 Java 的后缀自增语义一致[^2]。 ### 表达式嵌套与顺序 如果将多个类似的表达式组合在一起,如 `i = i++ + ++i + i++ + ++i;`,其结果将依赖于 JVM 的求值顺序。Java 中的操作数求值顺序是**从左到右**的,这意味着每个操作数在参与运算前都会被依次求值。因此,该表达式的执行顺序并非如 `(i++ + ++i) + (i++ + ++i)` 这样的分组,而是按照顺序逐个计算 `i++`、`++i`、`i++`、`++i` 的值,并将它们相加[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值