关于Java中自增操作的陷阱题目

java 复制代码
class Test {
    public static void main(String[] args) {
        int j = 0;
        for (int i = 0; i < 100; i++) {
            j = j++;
        }
        System.out.println(j);
    }
}
输出:0

详细地看一下自增操作和赋值操作的组合。特定语句是:

java 复制代码
j = j++;

这个语句的执行可以分解为以下步骤:

后缀自增操作:当我们看到 j++,它是一个后缀自增。这意味着首先返回 j 的当前值,然后 j 的值自增。

赋值操作:我们有 j = ...。这是一个赋值操作,将等号右边的值赋给 j。

现在,结合这两个操作,考虑 j 的初始值为 0:

j++ 先返回 0(因为它是后缀自增),然后 j 的值增加到 1。

但是,由于赋值操作,返回的 0 立即被赋予 j,这会撤销前面的自增操作。所以,j 的值又变回 0。

这样的过程在每次循环中都会发生,所以无论循环执行多少次,j 的值都始终保持为 0。

相关推荐
wjm0410062 分钟前
ios八股文 -- Objective-c
开发语言·ios·objective-c
小白(猿)员3 分钟前
数据结构中的列表:深度解析数组与链表的实现与抉择
开发语言
让代码飞~4 分钟前
idea进阶技能掌握, 使用自带HTTP测试工具,完全可替代PostMan
java·http·intellij-idea·postman
自信的小螺丝钉9 分钟前
Leetcode 343. 整数拆分 动态规划
算法·leetcode·动态规划
ademen11 分钟前
spring第9课,spring对DAO的支持
java·数据库·spring
小鱼人爱编程20 分钟前
Java基石--动态代理让你无中生有
java·后端·架构
lpfasd12322 分钟前
01_Go语言基础与环境搭建
开发语言·后端·golang
天天进步201526 分钟前
Python实战--基于Django的企业资源管理系统
开发语言·python·django
Q741_14727 分钟前
C++ 力扣 438.找到字符串中所有字母异位词 题解 优选算法 滑动窗口 每日一题
c++·算法·leetcode·双指针·滑动窗口
草莓熊Lotso28 分钟前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day8
c语言·开发语言·c++·刷题·强化训练