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

相关推荐
@atweiwei3 分钟前
LangChainRust:用 Rust 构建高性能 LLM 应用的完整指南
开发语言·人工智能·ai·rust·大模型·llm·agent
老约家的可汗15 分钟前
搜索二叉树的概念及使用
java·开发语言
不知名的老吴17 分钟前
R语言4.3.0安装包百度网盘中文版下载与详细安装指南
开发语言·r语言
棉猴19 分钟前
python海龟绘图之计算夹角towards()
开发语言·python·turtle·海龟绘图·towards
luoganttcc22 分钟前
CUDA grid/block 到矩阵映射示例(矩阵加法)
人工智能·算法·机器学习
张人玉24 分钟前
SMT 贴片机上位机项目
开发语言·c#
我不是懒洋洋24 分钟前
【经典题目】链表OJ(相交链表、环形链表、环形链表II、随机链表的复制)
c语言·开发语言·数据结构·链表·ecmascript·visual studio
被摘下的星星25 分钟前
Maven
java·maven
ん贤26 分钟前
口述Map
开发语言·面试·golang
悟空码字26 分钟前
别再重复造轮子了!SpringBoot对接第三方系统模板,拿来即用
java·spring boot·后端