关于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。

相关推荐
CoovallyAIHub38 分钟前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub41 分钟前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub1 小时前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
程序员清风1 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme1 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
CoovallyAIHub1 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
Be_Better1 小时前
学会与虚拟机对话---ASM
java
刀法如飞2 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕3 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
开源之眼4 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github